fixed mp4 extended size parser

This commit is contained in:
Roman Arutyunyan
2013-02-04 18:23:45 +04:00
parent 5325df0135
commit d59438d92d

View File

@ -2198,7 +2198,7 @@ ngx_rtmp_mp4_init(ngx_rtmp_session_t *s, ngx_file_t *f, ngx_int_t aindex,
ngx_rtmp_mp4_ctx_t *ctx; ngx_rtmp_mp4_ctx_t *ctx;
uint32_t hdr[2]; uint32_t hdr[2];
ssize_t n; ssize_t n;
size_t offset, page_offset, size; size_t offset, page_offset, size, shift;
uint64_t extended_size; uint64_t extended_size;
ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_mp4_module); ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_mp4_module);
@ -2232,6 +2232,7 @@ ngx_rtmp_mp4_init(ngx_rtmp_session_t *s, ngx_file_t *f, ngx_int_t aindex,
} }
size = ngx_rtmp_r32(hdr[0]); size = ngx_rtmp_r32(hdr[0]);
shift = sizeof(hdr);
if (size == 1) { if (size == 1) {
n = ngx_read_file(f, (u_char *) &extended_size, n = ngx_read_file(f, (u_char *) &extended_size,
@ -2245,6 +2246,7 @@ ngx_rtmp_mp4_init(ngx_rtmp_session_t *s, ngx_file_t *f, ngx_int_t aindex,
} }
size = ngx_rtmp_r64(extended_size); size = ngx_rtmp_r64(extended_size);
shift += sizeof(extended_size);
} }
if (hdr[1] == ngx_rtmp_mp4_make_tag('m','o','o','v')) { if (hdr[1] == ngx_rtmp_mp4_make_tag('m','o','o','v')) {
@ -2259,12 +2261,12 @@ ngx_rtmp_mp4_init(ngx_rtmp_session_t *s, ngx_file_t *f, ngx_int_t aindex,
offset += size; offset += size;
} }
if (size < 8) { if (size < shift) {
return NGX_ERROR; return NGX_ERROR;
} }
size -= 8; size -= shift;
offset += 8; offset += shift;
page_offset = offset & (ngx_pagesize - 1); page_offset = offset & (ngx_pagesize - 1);
ctx->mmaped_size = page_offset + size; ctx->mmaped_size = page_offset + size;