decoder/faad: skip assertion failure on large ID3 tags
When the ID3 tag in an AAC file is larger than the current buffer, the function decoder_buffer_consume() aborts. By using the new function decoder_buffer_skip() instead, we can safely skip the ID3 tag.
This commit is contained in:
parent
efb290073b
commit
b0f9a1454a
1
NEWS
1
NEWS
|
@ -1,6 +1,7 @@
|
||||||
ver 0.15.4 (2009/??/??)
|
ver 0.15.4 (2009/??/??)
|
||||||
* decoders:
|
* decoders:
|
||||||
- vorbis: revert "faster tag scanning with ov_test_callback()"
|
- vorbis: revert "faster tag scanning with ov_test_callback()"
|
||||||
|
- faad: skip assertion failure on large ID3 tags
|
||||||
* output:
|
* output:
|
||||||
- osx: fix the OS X 10.6 build
|
- osx: fix the OS X 10.6 build
|
||||||
|
|
||||||
|
|
|
@ -162,6 +162,7 @@ faad_song_duration(struct decoder_buffer *buffer, struct input_stream *is)
|
||||||
size_t tagsize;
|
size_t tagsize;
|
||||||
const unsigned char *data;
|
const unsigned char *data;
|
||||||
size_t length;
|
size_t length;
|
||||||
|
bool success;
|
||||||
|
|
||||||
fileread = is->size >= 0 ? is->size : 0;
|
fileread = is->size >= 0 ? is->size : 0;
|
||||||
|
|
||||||
|
@ -179,8 +180,11 @@ faad_song_duration(struct decoder_buffer *buffer, struct input_stream *is)
|
||||||
|
|
||||||
tagsize += 10;
|
tagsize += 10;
|
||||||
|
|
||||||
decoder_buffer_consume(buffer, tagsize);
|
success = decoder_buffer_skip(buffer, tagsize) &&
|
||||||
decoder_buffer_fill(buffer);
|
decoder_buffer_fill(buffer);
|
||||||
|
if (!success)
|
||||||
|
return -1;
|
||||||
|
|
||||||
data = decoder_buffer_read(buffer, &length);
|
data = decoder_buffer_read(buffer, &length);
|
||||||
if (data == NULL)
|
if (data == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue