[FFmpeg-soc] [soc]: r2578 - mlp/mlpdec.c

Ramiro Polla ramiro at lisha.ufsc.br
Fri Jun 27 23:33:54 CEST 2008


Hi,

Michael Niedermayer wrote:
> On Thu, Jun 26, 2008 at 07:26:20PM +0100, Ramiro Polla wrote:
>> Hello,
>>
>> ramiro wrote:
>>> Author: ramiro
>>> Date: Thu Jun 26 19:33:28 2008
>>> New Revision: 2578
>>>
>>> Log:
>>> More checks to see if there is enough data.
>>>
>>> Modified:
>>>    mlp/mlpdec.c
>>>
>>> Modified: mlp/mlpdec.c
>>> ==============================================================================
>>> --- mlp/mlpdec.c	(original)
>>> +++ mlp/mlpdec.c	Thu Jun 26 19:33:28 2008
>>> @@ -1009,6 +1009,9 @@ static int read_access_unit(AVCodecConte
>>>      for (substr = 0; substr < m->num_substreams; substr++) {
>>>          int extraword_present, checkdata_present, end;
>>>  
>>> +        if (bytes_left < 2)
>>> +            return -1;
>>> +
>>>          extraword_present = get_bits1(&gb);
>>>          skip_bits1(&gb);
>>>          checkdata_present = get_bits1(&gb);
>>> @@ -1022,6 +1025,8 @@ static int read_access_unit(AVCodecConte
>>>          bytes_left -= 2;
>>>  
>>>          if (extraword_present) {
>>> +            if (bytes_left < 2)
>>> +                return -1;
>>>              skip_bits(&gb, 16);
>>>              parity_bits ^= *buf++;
>>>              parity_bits ^= *buf++;
>> This seems like a long and painful road... While we're still reading 
>> headers with easily calculated size, this isn't too hard, and there 
>> won't be much overhead in the checks. But on more complicated headers 
>> and specially the VLC values it's not easy to see if we still have 
>> enough data.
>>
>> Lots of other codecs I've looked at seem to just trust init_get_bits() 
>> with the remaining bytes.
>>
>> What's the best practice here? Should the header checksum && coded 
>> lengths be enough to validate the input size?
> 
> All _writes_ must be checked, the reads are not critical.
> also dont forget FF_INPUT_BUFFER_PADDING_SIZE

Ok. So is it ok to apply these patches?
revert_1 just revert the last commit of extra checks.
revert_2 removes keeping track of bytes left. the value is never used 
later on the code anyways. coded values which pass the checksum are trusted.

> about other codecs
> mpeg & h26* are designed so 23 zero bits can never occur in a valid bitstream
> that way the 64 zero bit at the end are guranteed to trigger some kind of
> error.

Oh, so they're guaranteed to be zeroes? I'll have to take another look 
at the code with this new information in mind. MLP doesn't seem to be so 
well designed anyways.

> I definitly do not want the code to be salted with input buffer checks in
> every second line!

Too much salt is bad for our health =)

Ramiro Polla
-------------- next part --------------
A non-text attachment was scrubbed...
Name: revert_1.diff
Type: text/x-diff
Size: 704 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-soc/attachments/20080627/29c7b160/attachment.diff>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: revert_2.diff
Type: text/x-diff
Size: 1629 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-soc/attachments/20080627/29c7b160/attachment-0001.diff>


More information about the FFmpeg-soc mailing list