]> granicus.if.org Git - libjpeg-turbo/commitdiff
Merge branch '1.2.x' into 1.3.x 1.3.x
authorDRC <information@libjpeg-turbo.org>
Fri, 5 Feb 2016 00:46:13 +0000 (18:46 -0600)
committerDRC <information@libjpeg-turbo.org>
Fri, 5 Feb 2016 00:46:13 +0000 (18:46 -0600)
1  2 
ChangeLog.txt
jdhuff.c

diff --cc ChangeLog.txt
index 984b91d12a32a35f3e6efd2c3417e3088abe6928,3b6d05b7c2b761668183160e66e79e35aeaafe89..55d5c3544c339a0e1329b01b913e6edfd490332e
@@@ -7,193 -33,22 +7,202 @@@ if compiler optimization was enabled wh
  the regression tests to fail when doing a release build under Visual C++ 2010
  and later.
  
 -[9] Fixed a segfault that occurred when calling output_message() with msg_code
 +[2] Fixed a segfault that occurred when calling output_message() with msg_code
  set to JMSG_COPYRIGHT.
  
 -[10] Fixed a bug in the build system that was causing the Windows version of
 +[3] Fixed an issue whereby wrjpgcom was allowing comments longer than 65k
 +characters to be passed on the command line, which was causing it to generate
 +incorrect JPEG files.
 +
 +[4] Fixed a bug in the build system that was causing the Windows version of
  wrjpgcom to be built using the rdjpgcom code.
  
 -[11] Fixed an issue in the accelerated Huffman decoder that could have caused
 +[5] Fixed an extremely rare bug that could cause the Huffman encoder's local
 +buffer to overrun when a very high-frequency MCU is compressed using quality
 +100 and no subsampling, and when the JPEG output buffer is being dynamically
 +resized by the destination manager.  This issue was so rare that, even with a
 +test program specifically designed to make the bug occur (by injecting random
 +high-frequency YUV data into the compressor), it was reproducible only once in
 +about every 25 million iterations.
 +
 +[6] Fixed a build issue on OS X PowerPC platforms (md5cmp failed to build
 +because OS X does not provide the le32toh() and htole32() functions.)
 +
 +[7] The close() method in the TJCompressor and TJDecompressor Java classes is
 +now idempotent.  Previously, that method would call the native tjDestroy()
 +function even if the TurboJPEG instance had already been destroyed.  This
 +caused an exception to be thrown during finalization, if the close() method had
 +already been called.  The exception was caught, but it was still an expensive
 +operation.
 +
 +[8] The TurboJPEG API previously generated an error ("Could not determine
 +subsampling type for JPEG image") when attempting to decompress grayscale JPEG
 +images that were compressed with a sampling factor other than 1 (for instance,
 +with 'cjpeg -grayscale -sample 2x2').  Subsampling technically has no meaning
 +with grayscale JPEGs, and thus the horizontal and vertical sampling factors
 +for such images are ignored by the decompressor.  However, the TurboJPEG API
 +was being too rigid and was expecting the sampling factors to be equal to 1
 +before it treated the image as a grayscale JPEG.
 +
 +[9] Referring to [5] above, another extremely rare circumstance was discovered
 +under which the Huffman encoder's local buffer can be overrun when a buffered
 +destination manager is being used and an extremely-high-frequency block
 +(basically junk image data) is being encoded.  Even though the Huffman local
 +buffer was increased from 128 bytes to 136 bytes to address the previous
 +issue, the new issue caused even the larger buffer to be overrun.  Further
 +analysis reveals that, in the absolute worst case (such as setting alternating
 +AC coefficients to 32767 and -32768 in the JPEG scanning order), the Huffman
 +encoder can produce encoded blocks that approach double the size of the
 +unencoded blocks.  Thus, the Huffman local buffer was increased to 256 bytes,
 +which should prevent any such issue from re-occurring in the future.
 +
++[10] Fixed an issue in the accelerated Huffman decoder that could have caused
+ the decoder to read past the end of the input buffer when a malformed,
+ specially-crafted JPEG image was being decompressed.  In prior versions of
+ libjpeg-turbo, the accelerated Huffman decoder was invoked (in most cases) only
+ if there were > 128 bytes of data in the input buffer.  However, it is possible
+ to construct a JPEG image in which a single Huffman block is over 430 bytes
+ long, so this version of libjpeg-turbo activates the accelerated Huffman
+ decoder only if there are > 512 bytes of data in the input buffer.
  
 +1.3.1
 +=====
 +
 +[1] On Un*x systems, 'make install' now installs the libjpeg-turbo libraries
 +into /opt/libjpeg-turbo/lib32 by default on any 32-bit system, not just x86,
 +and into /opt/libjpeg-turbo/lib64 by default on any 64-bit system, not just
 +x86-64.  You can override this by overriding either the 'prefix' or 'libdir'
 +configure variables.
 +
 +[2] The Windows installer now places a copy of the TurboJPEG DLLs in the same
 +directory as the rest of the libjpeg-turbo binaries.  This was mainly done
 +to support TurboVNC 1.3, which bundles the DLLs in its Windows installation.
 +When using a 32-bit version of CMake on 64-bit Windows, it is impossible to
 +access the c:\WINDOWS\system32 directory, which made it impossible for the
 +TurboVNC build scripts to bundle the 64-bit TurboJPEG DLL.
 +
 +[3] Fixed a bug whereby attempting to encode a progressive JPEG with arithmetic
 +entropy coding (by passing arguments of -progressive -arithmetic to cjpeg or
 +jpegtran, for instance) would result in an error, "Requested feature was
 +omitted at compile time".
 +
 +[4] Fixed a couple of issues whereby malformed JPEG images would cause
 +libjpeg-turbo to use uninitialized memory during decompression.
 +
 +[5] Fixed an error ("Buffer passed to JPEG library is too small") that occurred
 +when calling the TurboJPEG YUV encoding function with a very small (< 5x5)
 +source image, and added a unit test to check for this error.
 +
 +[6] The Java classes should now build properly under Visual Studio 2010 and
 +later.
 +
 +[7] Fixed an issue that prevented SRPMs generated using the in-tree packaging
 +tools from being rebuilt on certain newer Linux distributions.
 +
 +[8] Numerous minor fixes to eliminate compilation and build/packaging system
 +warnings, fix cosmetic issues, improve documentation clarity, and other general
 +source cleanup.
 +
 +
 +1.3.0
 +=====
 +
 +[1] 'make test' now works properly on FreeBSD, and it no longer requires the
 +md5sum executable to be present on other Un*x platforms.
 +
 +[2] Overhauled the packaging system:
 +-- To avoid conflict with vendor-supplied libjpeg-turbo packages, the
 +official RPMs and DEBs for libjpeg-turbo have been renamed to
 +"libjpeg-turbo-official".
 +-- The TurboJPEG libraries are now located under /opt/libjpeg-turbo in the
 +official Linux and Mac packages, to avoid conflict with vendor-supplied
 +packages and also to streamline the packaging system.
 +-- Release packages are now created with the directory structure defined
 +by the configure variables "prefix", "bindir", "libdir", etc. (Un*x) or by the
 +CMAKE_INSTALL_PREFIX variable (Windows.)  The exception is that the docs are
 +always located under the system default documentation directory on Un*x and Mac
 +systems, and on Windows, the TurboJPEG DLL is always located in the Windows
 +system directory.
 +-- To avoid confusion, official libjpeg-turbo packages on Linux/Unix platforms
 +(except for Mac) will always install the 32-bit libraries in
 +/opt/libjpeg-turbo/lib32 and the 64-bit libraries in /opt/libjpeg-turbo/lib64.
 +-- Fixed an issue whereby, in some cases, the libjpeg-turbo executables on Un*x
 +systems were not properly linking with the shared libraries installed by the
 +same package.
 +-- Fixed an issue whereby building the "installer" target on Windows when
 +WITH_JAVA=1 would fail if the TurboJPEG JAR had not been previously built.
 +-- Building the "install" target on Windows now installs files into the same
 +places that the installer does.
 +
 +[3] Fixed a Huffman encoder bug that prevented I/O suspension from working
 +properly.
 +
 +
 +1.2.90 (1.3 beta1)
 +==================
 +
 +[1] Added support for additional scaling factors (3/8, 5/8, 3/4, 7/8, 9/8, 5/4,
 +11/8, 3/2, 13/8, 7/4, 15/8, and 2) when decompressing.  Note that the IDCT will
 +not be SIMD-accelerated when using any of these new scaling factors.
 +
 +[2] The TurboJPEG dynamic library is now versioned.  It was not strictly
 +necessary to do so, because TurboJPEG uses versioned symbols, and if a function
 +changes in an ABI-incompatible way, that function is renamed and a legacy
 +function is provided to maintain backward compatibility.  However, certain
 +Linux distro maintainers have a policy against accepting any library that isn't
 +versioned.
 +
 +[3] Extended the TurboJPEG Java API so that it can be used to compress a JPEG
 +image from and decompress a JPEG image to an arbitrary position in a large
 +image buffer.
 +
 +[4] The tjDecompressToYUV() function now supports the TJFLAG_FASTDCT flag.
 +
 +[5] The 32-bit supplementary package for amd64 Debian systems now provides
 +symlinks in /usr/lib/i386-linux-gnu for the TurboJPEG libraries in /usr/lib32.
 +This allows those libraries to be used on MultiArch-compatible systems (such as
 +Ubuntu 11 and later) without setting the linker path.
 +
 +[6] The TurboJPEG Java wrapper should now find the JNI library on Mac systems
 +without having to pass -Djava.library.path=/usr/lib to java.
 +
 +[7] TJBench has been ported to Java to provide a convenient way of validating
 +the performance of the TurboJPEG Java API.  It can be run with
 +'java -cp turbojpeg.jar TJBench'.
 +
 +[8] cjpeg can now be used to generate JPEG files with the RGB colorspace
 +(feature ported from jpeg-8d.)
 +
 +[9] The width and height in the -crop argument passed to jpegtran can now be
 +suffixed with "f" to indicate that, when the upper left corner of the cropping
 +region is automatically moved to the nearest iMCU boundary, the bottom right
 +corner should be moved by the same amount.  In other words, this feature causes
 +jpegtran to strictly honor the specified width/height rather than the specified
 +bottom right corner (feature ported from jpeg-8d.)
 +
 +[10] JPEG files using the RGB colorspace can now be decompressed into grayscale
 +images (feature ported from jpeg-8d.)
 +
 +[11] Fixed a regression caused by 1.2.1[7] whereby the build would fail with
 +multiple "Mismatch in operand sizes" errors when attempting to build the x86
 +SIMD code with NASM 0.98.
 +
 +[12] The in-memory source/destination managers (jpeg_mem_src() and
 +jpeg_mem_dest()) are now included by default when building libjpeg-turbo with
 +libjpeg v6b or v7 emulation, so that programs can take advantage of these
 +functions without requiring the use of the backward-incompatible libjpeg v8
 +ABI.  The "age number" of the libjpeg-turbo library on Un*x systems has been
 +incremented by 1 to reflect this.  You can disable this feature with a
 +configure/CMake switch in order to retain strict API/ABI compatibility with the
 +libjpeg v6b or v7 API/ABI (or with previous versions of libjpeg-turbo.)  See
 +README-turbo.txt for more details.
 +
 +[13] Added ARM v7s architecture to libjpeg.a and libturbojpeg.a in the official
 +libjpeg-turbo binary package for OS X, so that those libraries can be used to
 +build applications that leverage the faster CPUs in the iPhone 5 and iPad 4.
 +
 +
  1.2.1
  =====
  
diff --cc jdhuff.c
index b545e66273e21341cf4219fb3aaee6ba85d3fca1,59b065a1630a0f5559cb42284e85209cdfbd7aa1..9a687d3038d6bb60ec3d0691a45fcb90ca67fee5
+++ b/jdhuff.c
@@@ -3,8 -3,8 +3,8 @@@
   *
   * This file was part of the Independent JPEG Group's software:
   * Copyright (C) 1991-1997, Thomas G. Lane.
 - * Modifications:
 + * libjpeg-turbo Modifications:
-  * Copyright (C) 2009-2011, D. R. Commander.
+  * Copyright (C) 2009-2011, 2016, D. R. Commander.
   * For conditions of distribution and use, see the accompanying README file.
   *
   * This file contains Huffman entropy decoding routines.