wav/caf parser: ensure fmt/desc chunk

fixes https://github.com/nu774/fdkaac/issues/52
This commit is contained in:
nu774 2022-07-13 20:56:49 +09:00
parent 53fe239bf6
commit 4ec1422bd9
2 changed files with 9 additions and 5 deletions

View File

@ -172,6 +172,7 @@ int caf_parse(caf_reader_t *reader, int64_t *data_length)
{
uint32_t fcc;
int64_t chunk_size;
int desc_seen = 0;
*data_length = 0;
@ -181,9 +182,10 @@ int caf_parse(caf_reader_t *reader, int64_t *data_length)
TRY_IO(pcm_skip(&reader->io, 4)); /* mFileVersion, mFileFlags */
while ((fcc = caf_next_chunk(reader, &chunk_size)) != 0) {
if (fcc == M4AF_FOURCC('d','e','s','c'))
if (fcc == M4AF_FOURCC('d','e','s','c')) {
desc_seen = 1;
TRY_IO(caf_desc(reader, chunk_size));
else if (fcc == M4AF_FOURCC('i','n','f','o'))
} else if (fcc == M4AF_FOURCC('i','n','f','o'))
TRY_IO(caf_info(reader, chunk_size));
else if (fcc == M4AF_FOURCC('c','h','a','n')) {
ENSURE(reader->sample_format.channels_per_frame);
@ -199,7 +201,7 @@ int caf_parse(caf_reader_t *reader, int64_t *data_length)
TRY_IO(pcm_skip(&reader->io, chunk_size));
}
ENSURE(reader->sample_format.channels_per_frame);
ENSURE(fcc == M4AF_FOURCC('d','a','t','a'));
ENSURE(desc_seen && fcc == M4AF_FOURCC('d','a','t','a'));
return 0;
FAIL:
return -1;

View File

@ -155,6 +155,7 @@ static
int wav_parse(wav_reader_t *reader, int64_t *data_length)
{
uint32_t container, fcc, chunk_size;
int fmt_seen = 0;
*data_length = 0;
container = riff_next_chunk(reader, &chunk_size);
@ -167,6 +168,7 @@ int wav_parse(wav_reader_t *reader, int64_t *data_length)
riff_ds64(reader, data_length);
while ((fcc = riff_next_chunk(reader, &chunk_size)) != 0) {
if (fcc == RIFF_FOURCC('f','m','t',' ')) {
fmt_seen = 1;
if (wav_fmt(reader, chunk_size) < 0)
goto FAIL;
} else if (fcc == RIFF_FOURCC('d','a','t','a')) {
@ -178,8 +180,8 @@ int wav_parse(wav_reader_t *reader, int64_t *data_length)
TRY_IO(pcm_skip(&reader->io, (chunk_size + 1) & ~1));
}
}
if (fcc == RIFF_FOURCC('d','a','t','a'))
return 0;
ENSURE(fmt_seen && fcc == RIFF_FOURCC('d', 'a', 't', 'a'));
return 0;
FAIL:
return -1;
}