shithub: opus

Download patch

ref: 0719f6fc25d6ab376f674cd204cf4f4ae2d57e21
parent: 4da9e94c9802f2e6c4a44005a6e19e20001e6506
author: Gregory Maxwell <[email protected]>
date: Thu Jul 9 13:07:24 EDT 2009

This patch makes it safe to call the encode / decode functions with a NULL pointer in place of the pcm buffer.

--- a/libcelt/celt.c
+++ b/libcelt/celt.c
@@ -535,7 +535,7 @@
    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 @@
    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 @@
    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 @@
    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 @@
    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 @@
    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 @@
    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;
 }