From e699c1989c88fcff8c4bcf0f073966094be2d2cc Mon Sep 17 00:00:00 2001
From: Gregory Maxwell <greg@xiph.org>
Date: Fri, 25 Nov 2011 23:53:15 -0500
Subject: [PATCH] Testing tools improvements (no impact on draft)

---
 celt/tests/test_unit_entropy.c | 12 ++++++++----
 src/opus_decoder.c             |  2 ++
 src/opus_encoder.c             |  2 ++
 tests/test_opus_api.c          | 15 +++++++++------
 tests/test_opus_decode.c       | 13 ++++++++++++-
 tests/test_opus_encode.c       | 11 +++++++++++
 6 files changed, 44 insertions(+), 11 deletions(-)

diff --git a/celt/tests/test_unit_entropy.c b/celt/tests/test_unit_entropy.c
index a1ff668b6..5cba4fedd 100644
--- a/celt/tests/test_unit_entropy.c
+++ b/celt/tests/test_unit_entropy.c
@@ -35,16 +35,20 @@ int main(int _argc,char **_argv){
   unsigned int   sym;
   unsigned int   seed;
   unsigned char *ptr;
+  const char    *env_seed;
   ret=0;
   entropy=0;
     if (_argc > 2) {
 	fprintf(stderr, "Usage: %s [<seed>]\n", _argv[0]);
 	return 1;
     }
-    if (_argc > 1)
-	seed = atoi(_argv[1]);
-    else
-	seed = time(NULL);
+  env_seed = getenv("SEED");
+  if (_argc > 1)
+    seed = atoi(_argv[1]);
+  else if (env_seed)
+    seed = atoi(env_seed);
+  else
+    seed = time(NULL);
   /*Testing encoding of raw bit values.*/
   ptr = (unsigned char *)malloc(DATA_SIZE);
   ec_enc_init(&enc,ptr, DATA_SIZE);
diff --git a/src/opus_decoder.c b/src/opus_decoder.c
index 2fbe13f22..3df0cdfce 100644
--- a/src/opus_decoder.c
+++ b/src/opus_decoder.c
@@ -753,6 +753,8 @@ int opus_decode(OpusDecoder *st, const unsigned char *data,
    int ret, i;
    ALLOC_STACK;
 
+   if(frame_size<0)return OPUS_BAD_ARG;
+
    ALLOC(out, frame_size*st->channels, float);
 
    ret = opus_decode_native(st, data, len, out, frame_size, decode_fec, 0, NULL);
diff --git a/src/opus_encoder.c b/src/opus_encoder.c
index c33e3b527..b02936939 100644
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -1206,6 +1206,8 @@ int opus_encode_float(OpusEncoder *st, const float *pcm, int frame_size,
    VARDECL(opus_int16, in);
    ALLOC_STACK;
 
+   if(frame_size<0)return OPUS_BAD_ARG;
+
    ALLOC(in, frame_size*st->channels, opus_int16);
 
    for (i=0;i<frame_size*st->channels;i++)
diff --git a/tests/test_opus_api.c b/tests/test_opus_api.c
index 86cc4a421..7e2236f87 100644
--- a/tests/test_opus_api.c
+++ b/tests/test_opus_api.c
@@ -92,8 +92,8 @@ opus_int32 test_dec_api(void)
 #endif
    short sbuf[960*2];
    int c,err;
-   int *nullptr;
-   nullptr=0;
+   int *nullvalue;
+   nullvalue=0;
 
    cfgs=0;
    /*First test invalid configurations which should fail*/
@@ -163,7 +163,7 @@ opus_int32 test_dec_api(void)
    cfgs++;
 
    /*GET_PITCH has different execution paths depending on the previously decoded frame.*/
-   err=opus_decoder_ctl(dec, OPUS_GET_PITCH(nullptr));
+   err=opus_decoder_ctl(dec, OPUS_GET_PITCH(nullvalue));
    if(err!=OPUS_BAD_ARG)test_failed();
    cfgs++;
    VG_UNDEF(&i,sizeof(i));
@@ -297,8 +297,11 @@ opus_int32 test_msdec_api(void)
 #endif
    short sbuf[960*2];
    int a,b,c,err;
-   int *nullptr;
-   nullptr=0;
+#if 0
+   /*Relevant test not enabled for multistream*/
+   int *nullvalue;
+   nullvalue=0;
+#endif
 
    cfgs=0;
    /*First test invalid configurations which should fail*/
@@ -414,7 +417,7 @@ opus_int32 test_msdec_api(void)
    fprintf(stdout,"    OPUS_GET_BANDWIDTH ........................... OK.\n");
    cfgs++;
    /*GET_PITCH has different execution paths depending on the previously decoded frame.*/
-   err=opus_multistream_decoder_ctl(dec, OPUS_GET_PITCH(nullptr));
+   err=opus_multistream_decoder_ctl(dec, OPUS_GET_PITCH(nullvalue));
    if(err!=OPUS_BAD_ARG)test_failed();
    cfgs++;
    VG_UNDEF(&i,sizeof(i));
diff --git a/tests/test_opus_decode.c b/tests/test_opus_decode.c
index b7fa26e86..b2f78e313 100644
--- a/tests/test_opus_decode.c
+++ b/tests/test_opus_decode.c
@@ -91,7 +91,7 @@ int test_decoder_code0(void)
       }
    }
 
-   decsize=opus_decoder_get_size(2);
+   decsize=opus_decoder_get_size(1);
    decbak=(OpusDecoder *)malloc(decsize);
    if(decbak==NULL)test_failed();
 
@@ -335,19 +335,30 @@ int test_decoder_code0(void)
 int main(int _argc, char **_argv)
 {
    const char * oversion;
+   const char * env_seed;
+   int env_used;
+
    if(_argc>2)
    {
       fprintf(stderr,"Usage: %s [<seed>]\n",_argv[0]);
       return 1;
    }
 
+   env_used=0;
+   env_seed=getenv("SEED");
    if(_argc>1)iseed=atoi(_argv[1]);
+   else if(env_seed)
+   {
+      iseed=atoi(env_seed);
+      env_used=1;
+   }
    else iseed=(opus_uint32)time(NULL)^((getpid()&65535)<<16);
    Rw=Rz=iseed;
 
    oversion=opus_get_version_string();
    if(!oversion)test_failed();
    fprintf(stderr,"Testing %s decoder. Random seed: %u (%.4X)\n", oversion, iseed, fast_rand() % 65535);
+   if(env_used)fprintf(stderr,"  Random seed set from the environment (SEED=%s).\n", env_seed);
 
    test_decoder_code0();
 
diff --git a/tests/test_opus_encode.c b/tests/test_opus_encode.c
index 735d5438f..315790c65 100644
--- a/tests/test_opus_encode.c
+++ b/tests/test_opus_encode.c
@@ -366,19 +366,30 @@ int run_test1(void)
 int main(int _argc, char **_argv)
 {
    const char * oversion;
+   const char * env_seed;
+   int env_used;
+
    if(_argc>2)
    {
       fprintf(stderr,"Usage: %s [<seed>]\n",_argv[0]);
       return 1;
    }
 
+   env_used=0;
+   env_seed=getenv("SEED");
    if(_argc>1)iseed=atoi(_argv[1]);
+   else if(env_seed)
+   {
+      iseed=atoi(env_seed);
+      env_used=1;
+   }
    else iseed=(opus_uint32)time(NULL)^((getpid()&65535)<<16);
    Rw=Rz=iseed;
 
    oversion=opus_get_version_string();
    if(!oversion)test_failed();
    fprintf(stderr,"Testing %s encoder. Random seed: %u (%.4X)\n", oversion, iseed, fast_rand() % 65535);
+   if(env_used)fprintf(stderr,"  Random seed set from the environment (SEED=%s).\n", env_seed);
 
    run_test1();
 
-- 
GitLab