OSDN Git Service

MatroskaExtractor: detect infinite loop when parsing NALs
authorRobert Shih <robertshih@google.com>
Thu, 16 Jul 2015 22:04:12 +0000 (15:04 -0700)
committerAbhishek Arya <aarya@google.com>
Tue, 18 Aug 2015 02:33:07 +0000 (02:33 +0000)
Bug: 21335999
Change-Id: I76bd34610e52048ffcf16e41aa6175afc8a14ee4
(cherry picked from commit 2dcf6138ebc9c5688aeae151d2fbde55a2826128)

media/libstagefright/matroska/MatroskaExtractor.cpp

index cf20428..25d0cf1 100644 (file)
@@ -23,6 +23,7 @@
 #include "mkvparser.hpp"
 
 #include <media/stagefright/foundation/ADebug.h>
+#include <media/stagefright/foundation/AUtils.h>
 #include <media/stagefright/foundation/hexdump.h>
 #include <media/stagefright/DataSource.h>
 #include <media/stagefright/MediaBuffer.h>
@@ -563,7 +564,12 @@ status_t MatroskaSource::read(
                     TRESPASS();
             }
 
-            if (srcOffset + mNALSizeLen + NALsize > srcSize) {
+            if (srcOffset + mNALSizeLen + NALsize <= srcOffset + mNALSizeLen) {
+                frame->release();
+                frame = NULL;
+
+                return ERROR_MALFORMED;
+            } else if (srcOffset + mNALSizeLen + NALsize > srcSize) {
                 break;
             }