[PATCH] Mp4: fixed setting wrong mdat atom size in very rarecases.

胡聪 (hucc) hucong.c at foxmail.com
Mon Nov 21 14:04:25 UTC 2016


Hi,

On Mon, Nov 21, 2016 at 9:07 PM +0300, Maxim Dounin wrote:

>Hello!
>
>On Mon, Nov 21, 2016 at 05:40:52PM +0800, 胡聪 (hucc) wrote:
>
>> Hi,
>>
>> # HG changeset patch
>> # User hucongcong <hucong.c at foxmail.com>
>> # Date 1479719580 -28800
>> #      Mon Nov 21 17:13:00 2016 +0800
>> # Node ID f43feabe2e45ec102ffbe36428ccb504ff1526d2
>> # Parent  6a26016e9a138102798a7ec3e74747fbd6018f82
>> Mp4: fixed setting wrong mdat atom size in very rare cases.
>>
>> diff -r 6a26016e9a13 -r f43feabe2e45 src/http/modules/ngx_http_mp4_module.c
>> --- a/src/http/modules/ngx_http_mp4_module.c  Tue Nov 15 18:11:46 2016 +0300
>> +++ b/src/http/modules/ngx_http_mp4_module.c  Mon Nov 21 17:13:00 2016 +0800
>> @@ -1229,7 +1229,7 @@ ngx_http_mp4_update_mdat_atom(ngx_http_m
>> 
>>      atom_header = mp4->mdat_atom_header;
>> 
>> -    if ((uint64_t) atom_data_size > (uint64_t) 0xffffffff) {
>> +    if ((uint64_t) atom_data_size > (uint64_t) 0xfffffff7) {
>>          atom_size = 1;
>>          atom_header_size = sizeof(ngx_mp4_atom_header64_t);
>>          ngx_mp4_set_64value(atom_header + sizeof(ngx_mp4_atom_header_t),
>
>You may want to elaborate more about what are you trying to fix 
>here.
>
>Current code uses 32-bit atom headers for sizes up to maximum
>unsigned 32-bit value, 0xffffffff.  And this seems to perfectly
>agree with the specification.

Well, atom size is the sum of atom header size and atom data size.
And the specification says that the first 4 bytes are set to one
when the atom size is greater than 0xffffffff, which means atom
header size should be considered when the comparison takes place
between atom data size and the maximum unsigned 32-bit value.
We can image that atom_data_size is 0xfffffff9, and the first 4 bytes
will be set to the sum of sizeof(ngx_mp4_atom_header_t) and 
atom_data_size, then the error is obvious.

Regards,
-hucc


More information about the nginx-devel mailing list