OSDN Git Service

Don't let an invalid PES header length (from a corrupted packet) cause us to crash...
authorvan <van@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Wed, 28 Jan 2009 00:46:54 +0000 (00:46 +0000)
committervan <van@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Wed, 28 Jan 2009 00:46:54 +0000 (00:46 +0000)
git-svn-id: svn://localhost/HandBrake/trunk@2103 b64f7644-9d1e-0410-96f1-a4d463321fa5

libhb/stream.c

index 5f3358a..b50dff1 100755 (executable)
@@ -2081,16 +2081,17 @@ static void hb_ts_stream_find_pids(hb_stream_t *stream)
 
 static void fwrite64( hb_stream_t *stream, void *buf, int len )
 {
-    int pos;
-
-    pos = stream->fwrite_buf->size;
-    if ( pos + len > stream->fwrite_buf->alloc )
+    if ( len > 0 )
     {
-        int size = MAX(stream->fwrite_buf->alloc * 2, pos + len);
-        hb_buffer_realloc(stream->fwrite_buf, size);
+        int pos = stream->fwrite_buf->size;
+        if ( pos + len > stream->fwrite_buf->alloc )
+        {
+            int size = MAX(stream->fwrite_buf->alloc * 2, pos + len);
+            hb_buffer_realloc(stream->fwrite_buf, size);
+        }
+        memcpy( &(stream->fwrite_buf->data[pos]), buf, len );
+        stream->fwrite_buf->size += len;
     }
-    memcpy( &(stream->fwrite_buf->data[pos]), buf, len );
-    stream->fwrite_buf->size += len;
 }
 
 // convert a PES PTS or DTS to an int64