bytestream2: set the reader to the end when reading more than available
authorAnton Khirnov <anton@khirnov.net>
Fri, 10 Jul 2015 07:31:24 +0000 (09:31 +0200)
committerAnton Khirnov <anton@khirnov.net>
Sun, 12 Jul 2015 16:15:39 +0000 (18:15 +0200)
This prevents possible infinite loops with the calling code along the
lines of while (bytestream2_get_bytes_left()) { ... }, where the reader
does not advance.

CC: libav-stable@libav.org
libavcodec/bytestream.h

index 3eab225..cb3573b 100644 (file)
@@ -70,8 +70,10 @@ static av_always_inline type bytestream2_get_ ## name ## u(GetByteContext *g)  \
 }                                                                              \
 static av_always_inline type bytestream2_get_ ## name(GetByteContext *g)       \
 {                                                                              \
-    if (g->buffer_end - g->buffer < bytes)                                     \
+    if (g->buffer_end - g->buffer < bytes) {                                   \
+        g->buffer = g->buffer_end;                                             \
         return 0;                                                              \
+    }                                                                          \
     return bytestream2_get_ ## name ## u(g);                                   \
 }                                                                              \
 static av_always_inline type bytestream2_peek_ ## name(GetByteContext *g)      \