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. |