ref: ec15b298677838371c3cbcd986fddf28af13c1ba
parent: 45c7e44c812f42f3a8d7d6c765b96a3cf974524a
author: Fabian Greffrath <[email protected]>
date: Mon Aug 31 06:00:37 EDT 2020
fix heap-buffer-overflow in mp4read.c This originated from an integer overflow: If mp4config.frame.ents would be read-in with a value of (uint32t)(-1), it would overflow to 0 in the size calculation for the allocation in the next line. The malloc() function would then successfully return a pointer to a memory region of size 0, which will cause a segfault when written to. Fixes #57.
--- a/frontend/mp4read.c
+++ b/frontend/mp4read.c
@@ -353,7 +353,10 @@
u32in();
// Number of entries
mp4config.frame.ents = u32in();
- // fixme: check atom size
+
+ if (!(mp4config.frame.ents + 1))
+ return ERR_FAIL;
+
mp4config.frame.data = malloc(sizeof(*mp4config.frame.data)
* (mp4config.frame.ents + 1));