Mercurial > libavcodec.hg
comparison aacsbr.c @ 11671:7f301b81b503 libavcodec
Move the SBR patch count check to prevent overwrites.
Thanks to Chromium.
author | alexc |
---|---|
date | Fri, 30 Apr 2010 23:08:44 +0000 |
parents | 53584d5f86b8 |
children | f838fa3eefee |
comparison
equal
deleted
inserted
replaced
11670:53584d5f86b8 | 11671:7f301b81b503 |
---|---|
517 for (i = k; i == k || sb > (sbr->k[0] - 1 + msb - odd); i--) { | 517 for (i = k; i == k || sb > (sbr->k[0] - 1 + msb - odd); i--) { |
518 sb = sbr->f_master[i]; | 518 sb = sbr->f_master[i]; |
519 odd = (sb + sbr->k[0]) & 1; | 519 odd = (sb + sbr->k[0]) & 1; |
520 } | 520 } |
521 | 521 |
522 // Requirements (14496-3 sp04 p205) sets the maximum number of patches to 5. | |
523 // After this check the final number of patches can still be six which is | |
524 // illegal however the Coding Technologies decoder check stream has a final | |
525 // count of 6 patches | |
526 if (sbr->num_patches > 5) { | |
527 av_log(ac->avccontext, AV_LOG_ERROR, "Too many patches: %d\n", sbr->num_patches); | |
528 return -1; | |
529 } | |
530 | |
522 sbr->patch_num_subbands[sbr->num_patches] = FFMAX(sb - usb, 0); | 531 sbr->patch_num_subbands[sbr->num_patches] = FFMAX(sb - usb, 0); |
523 sbr->patch_start_subband[sbr->num_patches] = sbr->k[0] - odd - sbr->patch_num_subbands[sbr->num_patches]; | 532 sbr->patch_start_subband[sbr->num_patches] = sbr->k[0] - odd - sbr->patch_num_subbands[sbr->num_patches]; |
524 | 533 |
525 if (sbr->patch_num_subbands[sbr->num_patches] > 0) { | 534 if (sbr->patch_num_subbands[sbr->num_patches] > 0) { |
526 usb = sb; | 535 usb = sb; |
533 k = sbr->n_master; | 542 k = sbr->n_master; |
534 } while (sb != sbr->kx[1] + sbr->m[1]); | 543 } while (sb != sbr->kx[1] + sbr->m[1]); |
535 | 544 |
536 if (sbr->patch_num_subbands[sbr->num_patches-1] < 3 && sbr->num_patches > 1) | 545 if (sbr->patch_num_subbands[sbr->num_patches-1] < 3 && sbr->num_patches > 1) |
537 sbr->num_patches--; | 546 sbr->num_patches--; |
538 | |
539 // Requirements (14496-3 sp04 p205) sets the maximum number of patches to 5 | |
540 // However the Coding Technologies decoder check uses 6 patches | |
541 if (sbr->num_patches > 6) { | |
542 av_log(ac->avccontext, AV_LOG_ERROR, "Too many patches: %d\n", sbr->num_patches); | |
543 return -1; | |
544 } | |
545 | 547 |
546 return 0; | 548 return 0; |
547 } | 549 } |
548 | 550 |
549 /// Derived Frequency Band Tables (14496-3 sp04 p197) | 551 /// Derived Frequency Band Tables (14496-3 sp04 p197) |