diff mbox

[FFmpeg-devel,3/3] avcodec/wmalosslessdec: Fix some integer anomalies

Message ID 20191028180146.30966-3-michael@niedermayer.cc
State Accepted
Commit d3dee676b8a8ab6752c599e25c9b5461f06a3959
Headers show

Commit Message

Michael Niedermayer Oct. 28, 2019, 6:01 p.m. UTC
Fixes: left shift of negative value -341180
Fixes: 18401/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_WMALOSSLESS_fuzzer-5686380134400000

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
 libavcodec/wmalosslessdec.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Paul B Mahol Oct. 28, 2019, 6:22 p.m. UTC | #1
Trivial change, LGTM

On 10/28/19, Michael Niedermayer <michael@niedermayer.cc> wrote:
> Fixes: left shift of negative value -341180
> Fixes:
> 18401/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_WMALOSSLESS_fuzzer-5686380134400000
>
> Found-by: continuous fuzzing process
> https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
>  libavcodec/wmalosslessdec.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/libavcodec/wmalosslessdec.c b/libavcodec/wmalosslessdec.c
> index 19bac949d4..d4f18b9841 100644
> --- a/libavcodec/wmalosslessdec.c
> +++ b/libavcodec/wmalosslessdec.c
> @@ -766,7 +766,7 @@ static void revert_cdlms ## bits (WmallDecodeCtx *s, int
> ch, \
>      for (ilms = num_lms - 1; ilms >= 0; ilms--) { \
>          for (icoef = coef_begin; icoef < coef_end; icoef++) { \
>              int##bits##_t *prevvalues = (int##bits##_t
> *)s->cdlms[ch][ilms].lms_prevvalues; \
> -            pred = 1 << (s->cdlms[ch][ilms].scaling - 1); \
> +            pred = (1 << s->cdlms[ch][ilms].scaling) >> 1; \
>              residue = s->channel_residues[ch][icoef]; \
>              pred += s->dsp.scalarproduct_and_madd_int## bits
> (s->cdlms[ch][ilms].coefs, \
>                                                          prevvalues +
> s->cdlms[ch][ilms].recent, \
> @@ -987,9 +987,9 @@ static int decode_subframe(WmallDecodeCtx *s)
>
>          for (j = 0; j < subframe_len; j++) {
>              if (s->bits_per_sample == 16) {
> -                *s->samples_16[c]++ = (int16_t) s->channel_residues[c][j]
> << padding_zeroes;
> +                *s->samples_16[c]++ = (int16_t) s->channel_residues[c][j] *
> (1 << padding_zeroes);
>              } else {
> -                *s->samples_32[c]++ = s->channel_residues[c][j] <<
> (padding_zeroes + 8);
> +                *s->samples_32[c]++ = s->channel_residues[c][j] * (256 <<
> padding_zeroes);
>              }
>          }
>      }
> --
> 2.23.0
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
Michael Niedermayer Oct. 29, 2019, 1:33 p.m. UTC | #2
On Mon, Oct 28, 2019 at 07:22:11PM +0100, Paul B Mahol wrote:
> Trivial change, LGTM

will apply

thx

[...]
diff mbox

Patch

diff --git a/libavcodec/wmalosslessdec.c b/libavcodec/wmalosslessdec.c
index 19bac949d4..d4f18b9841 100644
--- a/libavcodec/wmalosslessdec.c
+++ b/libavcodec/wmalosslessdec.c
@@ -766,7 +766,7 @@  static void revert_cdlms ## bits (WmallDecodeCtx *s, int ch, \
     for (ilms = num_lms - 1; ilms >= 0; ilms--) { \
         for (icoef = coef_begin; icoef < coef_end; icoef++) { \
             int##bits##_t *prevvalues = (int##bits##_t *)s->cdlms[ch][ilms].lms_prevvalues; \
-            pred = 1 << (s->cdlms[ch][ilms].scaling - 1); \
+            pred = (1 << s->cdlms[ch][ilms].scaling) >> 1; \
             residue = s->channel_residues[ch][icoef]; \
             pred += s->dsp.scalarproduct_and_madd_int## bits (s->cdlms[ch][ilms].coefs, \
                                                         prevvalues + s->cdlms[ch][ilms].recent, \
@@ -987,9 +987,9 @@  static int decode_subframe(WmallDecodeCtx *s)
 
         for (j = 0; j < subframe_len; j++) {
             if (s->bits_per_sample == 16) {
-                *s->samples_16[c]++ = (int16_t) s->channel_residues[c][j] << padding_zeroes;
+                *s->samples_16[c]++ = (int16_t) s->channel_residues[c][j] * (1 << padding_zeroes);
             } else {
-                *s->samples_32[c]++ = s->channel_residues[c][j] << (padding_zeroes + 8);
+                *s->samples_32[c]++ = s->channel_residues[c][j] * (256 << padding_zeroes);
             }
         }
     }