]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
mp4: Reject files with zero time scale.
authorAndre Noll <maan@tuebingen.mpg.de>
Sat, 28 Aug 2021 16:35:18 +0000 (18:35 +0200)
committerAndre Noll <maan@tuebingen.mpg.de>
Mon, 27 Jun 2022 14:45:56 +0000 (16:45 +0200)
A value of zero indicates a corrupt mp4 file or a missing mdhd
atom. This is fatal because we need to divide by the time scale to
compute the duration of the audio track.

This patch modifies mp4_open_read() to check the value at open time
and fail the operation rather than allowing the open to succeed and
checking the value in mp4_get_duration(),

Only regular opens are affected since we don't look at the mdhd atom
for metadata opens.

mp4.c

diff --git a/mp4.c b/mp4.c
index e60f18f59b1adc26350ae25055df7c822f6f174c..9e33eb4c298e49ad5fd2f8ed40824200966e1d03 100644 (file)
--- a/mp4.c
+++ b/mp4.c
@@ -629,6 +629,9 @@ int mp4_open_read(const struct mp4_callback *cb, struct mp4 **result)
        ret = -E_MP4_BAD_SAMPLE_COUNT;
        if (f->track.stsz_sample_count == 0)
                goto fail;
+       ret = -E_MP4_CORRUPT;
+       if (f->track.time_scale == 0)
+               goto fail;
        *result = f;
        return 1;
 fail:
@@ -666,8 +669,6 @@ uint64_t mp4_get_duration(const struct mp4 *f)
 {
        const struct mp4_track *t = &f->track;
 
-       if (t->time_scale == 0)
-               return 0;
        return t->duration * 1000 / t->time_scale;
 }