vorbis: Reorder conditions to avoid possible overread
authorMark Thompson <sw@jkqxz.net>
Tue, 17 Oct 2017 21:25:46 +0000 (22:25 +0100)
committerMark Thompson <sw@jkqxz.net>
Wed, 18 Oct 2017 19:06:01 +0000 (20:06 +0100)
This can trigger a single-byte overread if the codebook has the maximum
number of entries.

Fixes #6743.

libavcodec/vorbis.c

index 399020e..ce23b94 100644 (file)
@@ -58,7 +58,7 @@ int ff_vorbis_len2vlc(uint8_t *bits, uint32_t *codes, unsigned num)
     uint32_t exit_at_level[33] = { 404 };
     unsigned i, j, p, code;
 
-    for (p = 0; (bits[p] == 0) && (p < num); ++p)
+    for (p = 0; (p < num) && (bits[p] == 0); ++p)
         ;
     if (p == num)
         return 0;
@@ -71,7 +71,7 @@ int ff_vorbis_len2vlc(uint8_t *bits, uint32_t *codes, unsigned num)
 
     ++p;
 
-    for (i = p; (bits[i] == 0) && (i < num); ++i)
+    for (i = p; (i < num) && (bits[i] == 0); ++i)
         ;
     if (i == num)
         return 0;