]> granicus.if.org Git - libjpeg-turbo/commitdiff
Fix a bug in the 64-bit Huffman encoder that Google discovered when encoding some...
authorDRC <dcommander@users.sourceforge.net>
Wed, 6 May 2015 22:41:12 +0000 (22:41 +0000)
committerDRC <dcommander@users.sourceforge.net>
Wed, 6 May 2015 22:41:12 +0000 (22:41 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/branches/1.4.x@1547 632fc199-4ca6-4c93-a231-07263d6284db

ChangeLog.txt
jchuff.c

index 3711188c101b37da1ad8efdaf2b6b7dd43cbd328..f31938e3f71e8c59a4267b10d0e09e67f3d6abe6 100644 (file)
@@ -37,6 +37,11 @@ h2v2 merged upsampling were not properly checking for the existence of DSPr2.
 version of the accelerated Huffman codec was not being compiled in when
 libjpeg-turbo was built on OS X.  Oops.
 
+[7] Fixed an extremely rare bug in the Huffman encoder that caused 64-bit
+builds of libjpeg-turbo to incorrectly encode a few specific test images when
+quality=98, an optimized Huffman table, and the slow integer forward DCT were
+used.
+
 
 1.4.0
 =====
index 67ddf518eee44dc4503273629c895a2edb25ea62..23c665913e2c13954e5b91594c23180a5a4324ae 100644 (file)
--- a/jchuff.c
+++ b/jchuff.c
@@ -4,7 +4,7 @@
  * This file was part of the Independent JPEG Group's software:
  * Copyright (C) 1991-1997, Thomas G. Lane.
  * libjpeg-turbo Modifications:
- * Copyright (C) 2009-2011, 2014 D. R. Commander.
+ * Copyright (C) 2009-2011, 2014-2015 D. R. Commander.
  * For conditions of distribution and use, see the accompanying README file.
  *
  * This file contains Huffman entropy encoding routines.
@@ -520,16 +520,14 @@ encode_one_block (working_state * state, JCOEFPTR block, int last_dc_val,
   /* Emit the Huffman-coded symbol for the number of bits */
   code = dctbl->ehufco[nbits];
   size = dctbl->ehufsi[nbits];
-  PUT_BITS(code, size)
-  CHECKBUF15()
+  EMIT_BITS(code, size)
 
   /* Mask off any extra bits in code */
   temp2 &= (((INT32) 1)<<nbits) - 1;
 
   /* Emit that number of bits of the value, if positive, */
   /* or the complement of its magnitude, if negative. */
-  PUT_BITS(temp2, nbits)
-  CHECKBUF15()
+  EMIT_BITS(temp2, nbits)
 
   /* Encode the AC coefficients per section F.1.2.2 */