diff mbox

[FFmpeg-devel] Fix for ticket #6764

Message ID DM5PR22MB06816D5A0EEEA5260B460058FE200@DM5PR22MB0681.namprd22.prod.outlook.com
State New
Headers show

Commit Message

Colin NG Nov. 22, 2017, 11:24 p.m. UTC
Add NULL pointer check for incoming audio data.

Comments

Carl Eugen Hoyos Nov. 22, 2017, 11:30 p.m. UTC | #1
2017-11-23 0:24 GMT+01:00 Colin NG <colin_ng@hotmail.com>:
> Add NULL pointer check for incoming audio data.

Please commit locally and attach the patch file
produced with git format-patch

Indentation looks wrong here, consider using
tools/patcheck (this may be my mistake tough).

Carl Eugen
diff mbox

Patch

diff --git a/libavcodec/opus_pvq.c b/libavcodec/opus_pvq.c
index f98b85d..f1dbc5d 100644
--- a/libavcodec/opus_pvq.c
+++ b/libavcodec/opus_pvq.c
@@ -504,6 +504,9 @@  static av_always_inline uint32_t quant_band_template(CeltPVQ *pvq, CeltFrame *f,
     int longblocks = (B0 == 1);
     uint32_t cm = 0;
 
+     if (!X)
+        return cm;
+
     if (N == 1) {
         float *x = X;
         for (i = 0; i <= stereo; i++) {
@@ -795,7 +798,7 @@  static av_always_inline uint32_t quant_band_template(CeltPVQ *pvq, CeltFrame *f,
             f->remaining2 -= curr_bits;
         }
 
-        if (q != 0) {
+        if (X && q != 0) {
             /* Finally do the actual (de)quantization */
             if (quant) {
                 cm = celt_alg_quant(rc, X, N, (q < 8) ? q : (8 + (q & 7)) << ((q >> 3) - 1),
@@ -902,6 +905,9 @@  static float pvq_band_cost(CeltPVQ *pvq, CeltFrame *f, OpusRangeCoder *rc, int b
     float *Y_orig = f->block[1].coeffs + (ff_celt_freq_bands[band] << f->size);
     OPUS_RC_CHECKPOINT_SPAWN(rc);
 
+    if (!X && !Y)
+        return 0.0f;
+
     memcpy(X, X_orig, band_size*sizeof(float));
     if (Y)
         memcpy(Y, Y_orig, band_size*sizeof(float));
@@ -911,7 +917,6 @@  static float pvq_band_cost(CeltPVQ *pvq, CeltFrame *f, OpusRangeCoder *rc, int b
         int curr_balance = f->remaining / FFMIN(3, f->coded_bands - band);
         b = av_clip_uintp2(FFMIN(f->remaining2 + 1, f->pulses[band] + curr_balance), 14);
     }
-
     if (f->dual_stereo) {
         pvq->encode_band(pvq, f, rc, band, X, NULL, band_size, b / 2, f->blocks, NULL,
                          f->size, norm1, 0, 1.0f, lowband_scratch, cm[0]);
@@ -925,7 +930,12 @@  static float pvq_band_cost(CeltPVQ *pvq, CeltFrame *f, OpusRangeCoder *rc, int b
 
     for (i = 0; i < band_size; i++) {
         err_x += (X[i] - X_orig[i])*(X[i] - X_orig[i]);
-        err_y += (Y[i] - Y_orig[i])*(Y[i] - Y_orig[i]);
+    }
+
+   if (Y) {
+        for (i = 0; i < band_size; i++) {
+            err_y += (Y[i] - Y_orig[i])*(Y[i] - Y_orig[i]);
+        }
     }
 
     dist = sqrtf(err_x) + sqrtf(err_y);