changeset 241:4bb6289eff93 libavcodec

avoid overflow of picturenumber*fps*10000 bug found by Lennert Buytenhek <buytenh@gnu.org>
author michaelni
date Mon, 18 Feb 2002 01:58:00 +0000
parents e3e0094cb5c9
children d1a9663b973b
files h263.c mpeg12.c
diffstat 2 files changed, 3 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/h263.c	Mon Feb 18 00:31:16 2002 +0000
+++ b/h263.c	Mon Feb 18 01:58:00 2002 +0000
@@ -68,7 +68,7 @@
     s->gob_number = 0;
 
     put_bits(&s->pb, 22, 0x20); /* PSC */
-    put_bits(&s->pb, 8, ((s->picture_number * 30 * FRAME_RATE_BASE) / 
+    put_bits(&s->pb, 8, (((INT64)s->picture_number * 30 * FRAME_RATE_BASE) / 
                          s->frame_rate) & 0xff);
 
     put_bits(&s->pb, 1, 1);	/* marker */
--- a/mpeg12.c	Mon Feb 18 00:31:16 2002 +0000
+++ b/mpeg12.c	Mon Feb 18 01:58:00 2002 +0000
@@ -106,7 +106,7 @@
             /* time code : we must convert from the real frame rate to a
                fake mpeg frame rate in case of low frame rate */
             fps = frame_rate_tab[s->frame_rate_index];
-            time_code = s->fake_picture_number * FRAME_RATE_BASE;
+            time_code = (INT64)s->fake_picture_number * FRAME_RATE_BASE;
             s->gop_picture_number = s->fake_picture_number;
             put_bits(&s->pb, 5, (UINT32)((time_code / (fps * 3600)) % 24));
             put_bits(&s->pb, 6, (UINT32)((time_code / (fps * 60)) % 60));
@@ -121,7 +121,7 @@
             /* insert empty P pictures to slow down to the desired
                frame rate. Each fake pictures takes about 20 bytes */
             fps = frame_rate_tab[s->frame_rate_index];
-            n = ((s->picture_number * fps) / s->frame_rate) - 1;
+            n = (((INT64)s->picture_number * fps) / s->frame_rate) - 1;
             while (s->fake_picture_number < n) {
                 mpeg1_skip_picture(s, s->fake_picture_number - 
                                    s->gop_picture_number);