diff mbox

[FFmpeg-devel,1/4] avcodec/g2meet: Change order of operations to avoid undefined behavior

Message ID 20180504174348.24364-1-michael@niedermayer.cc
State Accepted
Commit 0a4745145840d97619c424961c1b5c625dbf516c
Headers show

Commit Message

Michael Niedermayer May 4, 2018, 5:43 p.m. UTC
Fixes: signed integer overflow: 65280 * 196032 cannot be represented in type 'int'
Fixes: 7279/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_G2M_fuzzer-5977332473921536

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

Comments

Michael Niedermayer May 6, 2018, 7:04 p.m. UTC | #1
On Fri, May 04, 2018 at 07:43:45PM +0200, Michael Niedermayer wrote:
> Fixes: signed integer overflow: 65280 * 196032 cannot be represented in type 'int'
> Fixes: 7279/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_G2M_fuzzer-5977332473921536
> 
> Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
>  libavcodec/g2meet.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)

will apply patchset

[...]
diff mbox

Patch

diff --git a/libavcodec/g2meet.c b/libavcodec/g2meet.c
index b409dae813..5edfb31560 100644
--- a/libavcodec/g2meet.c
+++ b/libavcodec/g2meet.c
@@ -1356,14 +1356,16 @@  static void g2m_paint_cursor(G2MContext *c, uint8_t *dst, int stride)
     } else {
         dst    +=  x * 3;
     }
-    if (y < 0) {
+
+    if (y < 0)
         h      +=  y;
+    if (w < 0 || h < 0)
+        return;
+    if (y < 0) {
         cursor += -y * c->cursor_stride;
     } else {
         dst    +=  y * stride;
     }
-    if (w < 0 || h < 0)
-        return;
 
     for (j = 0; j < h; j++) {
         for (i = 0; i < w; i++) {