avcodec/h264: Allow partial escaping
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 6 Sep 2014 23:42:28 +0000 (01:42 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 6 Sep 2014 23:58:18 +0000 (01:58 +0200)
Fixes Ticket3923

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/h264.c

index 0fcc769..4b7ce9c 100644 (file)
@@ -248,7 +248,7 @@ const uint8_t *ff_h264_decode_nal(H264Context *h, const uint8_t *src,
 
 #define STARTCODE_TEST                                                  \
     if (i + 2 < length && src[i + 1] == 0 && src[i + 2] <= 3) {         \
-        if (src[i + 2] != 3) {                                          \
+        if (src[i + 2] != 3 && src[i + 2] != 0) {                       \
             /* startcode, so we must be past the end */                 \
             length = i;                                                 \
         }                                                               \
@@ -320,7 +320,7 @@ const uint8_t *ff_h264_decode_nal(H264Context *h, const uint8_t *src,
         if (src[si + 2] > 3) {
             dst[di++] = src[si++];
             dst[di++] = src[si++];
-        } else if (src[si] == 0 && src[si + 1] == 0) {
+        } else if (src[si] == 0 && src[si + 1] == 0 && src[si + 2] != 0) {
             if (src[si + 2] == 3) { // escape
                 dst[di++]  = 0;
                 dst[di++]  = 0;