summaryrefslogtreecommitdiff
path: root/apps/codecs/libm4a/demux.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs/libm4a/demux.c')
-rw-r--r--apps/codecs/libm4a/demux.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/apps/codecs/libm4a/demux.c b/apps/codecs/libm4a/demux.c
index 634bb4f..912e732 100644
--- a/apps/codecs/libm4a/demux.c
+++ b/apps/codecs/libm4a/demux.c
@@ -150,14 +150,15 @@ static bool read_chunk_esds(qtmovie_t *qtmovie, size_t chunk_len)
/* read length */
qtmovie->res->codecdata_len = mp4ff_read_mp4_descr_length(qtmovie->stream);
- qtmovie->res->codecdata = malloc(qtmovie->res->codecdata_len);
- if (qtmovie->res->codecdata)
+ if (qtmovie->res->codecdata_len > MAX_CODECDATA_SIZE)
{
- stream_read(qtmovie->stream, qtmovie->res->codecdata_len, qtmovie->res->codecdata);
- } else {
- qtmovie->res->codecdata_len = 0;
+ DEBUGF("codecdata too large (%d) in esds\n",
+ (int)qtmovie->res->codecdata_len);
+ return false;
}
+ stream_read(qtmovie->stream, qtmovie->res->codecdata_len, qtmovie->res->codecdata);
+
/* will skip the remainder of the atom */
return true;
}
@@ -225,19 +226,21 @@ static bool read_chunk_stsd(qtmovie_t *qtmovie, size_t chunk_len)
/* 12 = audio format atom, 8 = padding */
qtmovie->res->codecdata_len = entry_remaining + 12 + 8;
- qtmovie->res->codecdata = malloc(qtmovie->res->codecdata_len);
-
- if (!qtmovie->res->codecdata)
+ if (qtmovie->res->codecdata_len > MAX_CODECDATA_SIZE)
{
- DEBUGF("stsd too large\n");
- return false;
+ DEBUGF("codecdata too large (%d) in stsd\n",
+ (int)qtmovie->res->codecdata_len);
}
memset(qtmovie->res->codecdata, 0, qtmovie->res->codecdata_len);
/* audio format atom */
+#if 0
+ /* The ALAC decoder skips these bytes, so there is no need to store them,
+ and this code isn't endian/alignment safe */
((unsigned int*)qtmovie->res->codecdata)[0] = 0x0c000000;
((unsigned int*)qtmovie->res->codecdata)[1] = MAKEFOURCC('a','m','r','f');
((unsigned int*)qtmovie->res->codecdata)[2] = MAKEFOURCC('c','a','l','a');
+#endif
stream_read(qtmovie->stream,
entry_remaining,