This patch makes it safe to call the encode / decode functions with a NULL pointer...
authorGregory Maxwell <greg@xiph.org>
Thu, 9 Jul 2009 21:07:24 +0000 (17:07 -0400)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Sun, 12 Jul 2009 05:01:33 +0000 (01:01 -0400)
libcelt/celt.c

index 6269d63..f4ad813 100644 (file)
@@ -535,7 +535,7 @@ int celt_encode_float(CELTEncoder * restrict st, const celt_sig_t * pcm, celt_si
    if (check_mode(st->mode) != CELT_OK)
       return CELT_INVALID_MODE;
 
-   if (nbCompressedBytes<0)
+   if (nbCompressedBytes<0 || pcm==NULL)
      return CELT_BAD_ARG; 
 
    /* The memset is important for now in case the encoder doesn't 
@@ -920,6 +920,9 @@ int celt_encode_float(CELTEncoder * restrict st, const float * pcm, float * opti
    if (check_mode(st->mode) != CELT_OK)
       return CELT_INVALID_MODE;
 
+   if (pcm==NULL)
+      return CELT_BAD_ARG;
+
    SAVE_STACK;
    C = CHANNELS(st->mode);
    N = st->block_size;
@@ -952,6 +955,9 @@ int celt_encode(CELTEncoder * restrict st, const celt_int16_t * pcm, celt_int16_
    if (check_mode(st->mode) != CELT_OK)
       return CELT_INVALID_MODE;
 
+   if (pcm==NULL)
+      return CELT_BAD_ARG;
+
    SAVE_STACK;
    C=CHANNELS(st->mode);
    N=st->block_size;
@@ -1293,6 +1299,9 @@ int celt_decode_float(CELTDecoder * restrict st, const unsigned char *data, int
    if (check_mode(st->mode) != CELT_OK)
       return CELT_INVALID_MODE;
 
+   if (pcm==NULL)
+      return CELT_BAD_ARG;
+
    N = st->block_size;
    N4 = (N-st->overlap)>>1;
 
@@ -1439,15 +1448,18 @@ int celt_decode_float(CELTDecoder * restrict st, const unsigned char *data, int
    if (check_mode(st->mode) != CELT_OK)
       return CELT_INVALID_MODE;
 
+   if (pcm==NULL)
+      return CELT_BAD_ARG;
+
    SAVE_STACK;
    C = CHANNELS(st->mode);
    N = st->block_size;
+   
    ALLOC(out, C*N, celt_int16_t);
-
    ret=celt_decode(st, data, len, out);
-
    for (j=0;j<C*N;j++)
-     pcm[j]=out[j]*(1/32768.);
+      pcm[j]=out[j]*(1/32768.);
+     
    RESTORE_STACK;
    return ret;
 }
@@ -1464,6 +1476,9 @@ int celt_decode(CELTDecoder * restrict st, const unsigned char *data, int len, c
    if (check_mode(st->mode) != CELT_OK)
       return CELT_INVALID_MODE;
 
+   if (pcm==NULL)
+      return CELT_BAD_ARG;
+
    SAVE_STACK;
    C = CHANNELS(st->mode);
    N = st->block_size;
@@ -1472,8 +1487,8 @@ int celt_decode(CELTDecoder * restrict st, const unsigned char *data, int len, c
    ret=celt_decode_float(st, data, len, out);
 
    for (j=0;j<C*N;j++)
-     pcm[j] = FLOAT2INT16 (out[j]);
-
+      pcm[j] = FLOAT2INT16 (out[j]);
+   
    RESTORE_STACK;
    return ret;
 }