|
From: <bc...@us...> - 2010-01-29 15:21:10
|
Revision: 1459
http://iaxclient.svn.sourceforge.net/iaxclient/?rev=1459&view=rev
Author: bcholew
Date: 2010-01-29 15:21:03 +0000 (Fri, 29 Jan 2010)
Log Message:
-----------
Avoid crash in slicer for larger-than-expected theora frames.
Correctly handle slicing 0-byte theora frames.
Increase de/slicer verbosity a smidge.
Modified Paths:
--------------
trunk/lib/slice.c
Modified: trunk/lib/slice.c
===================================================================
--- trunk/lib/slice.c 2010-01-29 14:42:28 UTC (rev 1458)
+++ trunk/lib/slice.c 2010-01-29 15:21:03 UTC (rev 1459)
@@ -41,10 +41,30 @@
int i, ssize;
if ( data == NULL || slice_set == NULL || sc == NULL)
+ {
+ fprintf(stderr, "slice: invalid param(s): data=%p, set=%p, context=%p\n",
+ data, slice_set, sc);
return -1;
+ }
+ // Theora packets can be 0-byte (delta-frame with no coded blocks)
+ if ( size )
+ {
// Figure out how many slices we need
slice_set->num_slices = (size - 1) / sc->slice_size + 1;
+
+ if ( slice_set->num_slices > MAX_NO_SLICES )
+ {
+ fprintf(stderr, "slice: %d-byte frame is too large "
+ "- would require %d slices\n",
+ size, slice_set->num_slices);
+ return -1;
+ }
+ }
+ else
+ {
+ slice_set->num_slices = 1;
+ }
for ( i = 0; i < slice_set->num_slices; i++ )
{
@@ -165,6 +185,8 @@
if ( dsc->slice_size * slice_index + inlen > MAX_ENCODED_FRAME_SIZE )
{
// Frame would be too large, ignore slice
+ fprintf(stderr, "deslice: dropping frame that's > %d bytes\n",
+ MAX_ENCODED_FRAME_SIZE);
*frames_dropped = 1;
return NULL;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|