[SCM] libav/experimental: * Bad buffer management bug. Forgot to take care of the case where doubling the size of the buffer is not enough.

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:32:14 UTC 2013


The following commit has been merged in the experimental branch:
commit 31def229842f7e3e2ccce640f0a27f5ccefb5565
Author: Philip Gladstone <philipjsg at users.sourceforge.net>
Date:   Thu May 30 20:37:51 2002 +0000

    * Bad buffer management bug. Forgot to take care of the case
      where doubling the size of the buffer is not enough.
    
    Originally committed as revision 633 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/ffserver.c b/ffserver.c
index 45250c6..86e21d0 100644
--- a/ffserver.c
+++ b/ffserver.c
@@ -1317,13 +1317,21 @@ static void http_write_packet(void *opaque,
         c->buffer_ptr = c->buffer_end = c->buffer;
 
     if (c->buffer_end - c->buffer + size > c->buffer_size) {
-        UINT8 *new_buffer = av_malloc(c->buffer_size * 2);
+        int new_buffer_size = c->buffer_size * 2;
+        UINT8 *new_buffer;
+
+        if (new_buffer_size <= c->buffer_end - c->buffer + size) {
+            new_buffer_size = c->buffer_end - c->buffer + size + c->buffer_size;
+        }
+
+        new_buffer = av_malloc(new_buffer_size);
         if (new_buffer) {
             memcpy(new_buffer, c->buffer, c->buffer_end - c->buffer);
             c->buffer_end += (new_buffer - c->buffer);
             c->buffer_ptr += (new_buffer - c->buffer);
             av_free(c->buffer);
             c->buffer = new_buffer;
+            c->buffer_size = new_buffer_size;
         } else {
             av_abort();
         }

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list