Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ecf509a9 authored by Marco Nelissen's avatar Marco Nelissen
Browse files

Fix integer overflow in time conversion

Converting unix epoch time to mpeg4 time requires adding over 2B seconds,
which caused an overflow in a calculation involving time_t, which is signed.

Bug: 23574783
Change-Id: I21bacc9f5a422091f3c903fb8cf1c760fc078953
parent 6b043757
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -938,7 +938,11 @@ uint32_t MPEG4Writer::getMpeg4Time() {
    // MP4 file uses time counting seconds since midnight, Jan. 1, 1904
    // while time function returns Unix epoch values which starts
    // at 1970-01-01. Lets add the number of seconds between them
    uint32_t mpeg4Time = now + (66 * 365 + 17) * (24 * 60 * 60);
    static const uint32_t delta = (66 * 365 + 17) * (24 * 60 * 60);
    if (now < 0 || uint32_t(now) > UINT32_MAX - delta) {
        return 0;
    }
    uint32_t mpeg4Time = uint32_t(now) + delta;
    return mpeg4Time;
}