]> granicus.if.org Git - libjpeg-turbo/commitdiff
Fix rare bug: right shift by a negative # of bits
authorDRC <information@libjpeg-turbo.org>
Tue, 21 Jul 2015 21:43:39 +0000 (16:43 -0500)
committerDRC <information@libjpeg-turbo.org>
Wed, 29 Jul 2015 22:19:35 +0000 (17:19 -0500)
Under very rare circumstances, decompressing specific corrupt JPEG
images would create a situation whereby GET_BITS(1) was invoked
from within HUFF_DECODE_FAST() when bits_left=0. This produced a right
shift by a negative number of bits, which is undefined in C.

jdhuff.c

index 36fd03b936b3a67595e7c443db78d48b149d990e..4197cc5ce55ad8ec33f02708b27d9b5967f139e5 100644 (file)
--- a/jdhuff.c
+++ b/jdhuff.c
@@ -422,7 +422,7 @@ jpeg_fill_bit_buffer (bitread_working_state * state,
 
 /* Pre-fetch 48 bytes, because the holding register is 64-bit */
 #define FILL_BIT_BUFFER_FAST \
-  if (bits_left < 16) { \
+  if (bits_left <= 16) { \
     GET_BYTE GET_BYTE GET_BYTE GET_BYTE GET_BYTE GET_BYTE \
   }
 
@@ -430,7 +430,7 @@ jpeg_fill_bit_buffer (bitread_working_state * state,
 
 /* Pre-fetch 16 bytes, because the holding register is 32-bit */
 #define FILL_BIT_BUFFER_FAST \
-  if (bits_left < 16) { \
+  if (bits_left <= 16) { \
     GET_BYTE GET_BYTE \
   }