Hello community, here is the log from the commit of package libjpeg-turbo for openSUSE:Factory checked in at 2019-03-18 10:36:15 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libjpeg-turbo (Old) and /work/SRC/openSUSE:Factory/.libjpeg-turbo.new.28833 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libjpeg-turbo" Mon Mar 18 10:36:15 2019 rev:47 rq:684675 version:unknown Changes: -------- --- /work/SRC/openSUSE:Factory/libjpeg-turbo/libjpeg-turbo.changes 2019-01-26 22:20:04.878969084 +0100 +++ /work/SRC/openSUSE:Factory/.libjpeg-turbo.new.28833/libjpeg-turbo.changes 2019-03-18 10:36:20.315518022 +0100 @@ -1,0 +2,39 @@ +Wed Mar 13 12:02:57 UTC 2019 - [email protected] + +- updated to version 2.0.2: + 1. Fixed a regression introduced by 2.0.1[5] that prevented a runtime search + path (rpath) from being embedded in the libjpeg-turbo shared libraries and + executables for macOS and iOS. This caused a fatal error of the form + "dyld: Library not loaded" when attempting to use one of the executables, + unless `DYLD_LIBRARY_PATH` was explicitly set to the location of the + libjpeg-turbo shared libraries. + 2. Fixed an integer overflow and subsequent segfault (CVE-2018-20330) that + occurred when attempting to load a BMP file with more than 1 billion pixels + using the `tjLoadImage()` function. + 3. Fixed a buffer overrun (CVE-2018-19664) that occurred when attempting to + decompress a specially-crafted malformed JPEG image to a 256-color BMP using + djpeg. + 4. Fixed a floating point exception that occurred when attempting to + decompress a specially-crafted malformed JPEG image with a specified image + width or height of 0 using the C version of TJBench. + 5. The TurboJPEG API will now decompress 4:4:4 JPEG images with 2x1, 1x2, 3x1, + or 1x3 luminance and chrominance sampling factors. This is a non-standard way + of specifying 1x subsampling (normally 4:4:4 JPEGs have 1x1 luminance and + chrominance sampling factors), but the JPEG format and the libjpeg API both + allow it. + 6. Fixed a regression introduced by 2.0 beta1[7] that caused djpeg to generate + incorrect PPM images when used with the `-colors` option. + 7. Fixed an issue whereby a static build of libjpeg-turbo (a build in which + `ENABLE_SHARED` is `0`) could not be installed using the Visual Studio IDE. + 8. Fixed a severe performance issue in the Loongson MMI SIMD extensions that + occurred when compressing RGB images whose image rows were not 64-bit-aligned. +- modified patches + % ctest-depends.patch (refreshed) +- deleted patches + - libjpeg-turbo-CVE-2018-19644.patch (upstreamed) + - libjpeg-turbo-CVE-2018-20330.patch (upstreamed) +- added sources + + libjpeg-turbo-2.0.2.tar.gz.sig + + libjpeg-turbo.keyring + +------------------------------------------------------------------- Old: ---- libjpeg-turbo-2.0.1.tar.gz libjpeg-turbo-CVE-2018-19644.patch libjpeg-turbo-CVE-2018-20330.patch New: ---- libjpeg-turbo-2.0.2.tar.gz libjpeg-turbo-2.0.2.tar.gz.sig libjpeg-turbo.keyring ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libjpeg-turbo.spec ++++++ --- /var/tmp/diff_new_pack.TkzEHz/_old 2019-03-18 10:36:22.503517548 +0100 +++ /var/tmp/diff_new_pack.TkzEHz/_new 2019-03-18 10:36:22.511517546 +0100 @@ -19,7 +19,7 @@ %define asan_build 0 %define debug_build 0 -%define srcver 2.0.1 +%define srcver 2.0.2 %define major 8 %define minor 2 %define micro 2 @@ -39,8 +39,6 @@ Source1: baselibs.conf Patch1: libjpeg-turbo-1.3.0-tiff-ojpeg.patch Patch2: ctest-depends.patch -Patch3: libjpeg-turbo-CVE-2018-19644.patch -Patch4: libjpeg-turbo-CVE-2018-20330.patch BuildRequires: cmake BuildRequires: gcc-c++ BuildRequires: pkgconfig @@ -106,8 +104,6 @@ %setup -q %patch1 %patch2 -p1 -%patch4 -p1 -#%patch3 -p1 %build MYLDFLAGS="-Wl,-z,relro,-z,now" ++++++ libjpeg62-turbo.spec ++++++ --- /var/tmp/diff_new_pack.TkzEHz/_old 2019-03-18 10:36:22.531517542 +0100 +++ /var/tmp/diff_new_pack.TkzEHz/_new 2019-03-18 10:36:22.535517541 +0100 @@ -19,7 +19,7 @@ %define major 62 %define minor 3 %define micro 0 -%define srcver 2.0.1 +%define srcver 2.0.2 %define libver %{major}.%{minor}.%{micro} Name: libjpeg62-turbo Version: %{srcver} @@ -29,11 +29,11 @@ Group: Productivity/Graphics/Convertors URL: http://sourceforge.net/projects/libjpeg-turbo Source0: http://downloads.sf.net/libjpeg-turbo/libjpeg-turbo-%{version}.tar.gz -Source1: baselibs.conf +Source1: http://downloads.sf.net/libjpeg-turbo/libjpeg-turbo-%{version}.tar.gz.sig +Source2: libjpeg-turbo.keyring +Source3: baselibs.conf Patch1: libjpeg-turbo-1.3.0-tiff-ojpeg.patch Patch2: ctest-depends.patch -Patch3: libjpeg-turbo-CVE-2018-19644.patch -Patch4: libjpeg-turbo-CVE-2018-20330.patch BuildRequires: cmake BuildRequires: gcc-c++ # needed for tests as we remove the lib here @@ -78,8 +78,6 @@ %setup -q -n libjpeg-turbo-%{srcver} %patch1 %patch2 -p1 -%patch4 -p1 -%patch3 -p1 %build export LDFLAGS="-Wl,-z,relro,-z,now" ++++++ ctest-depends.patch ++++++ --- /var/tmp/diff_new_pack.TkzEHz/_old 2019-03-18 10:36:22.559517535 +0100 +++ /var/tmp/diff_new_pack.TkzEHz/_new 2019-03-18 10:36:22.559517535 +0100 @@ -1,13 +1,9 @@ -Index: libjpeg-turbo-2.0.0/CMakeLists.txt +Index: libjpeg-turbo-2.0.2/CMakeLists.txt =================================================================== ---- libjpeg-turbo-2.0.0.orig/CMakeLists.txt -+++ libjpeg-turbo-2.0.0/CMakeLists.txt -@@ -997,9 +997,12 @@ foreach(libtype ${TEST_LIBTYPES}) - - add_test(djpeg-${libtype}-rgb-islow-icc-cmp - ${MD5CMP} b06a39d730129122e85c1363ed1bbc9e testout_rgb_islow.icc) -+ set_tests_properties(djpeg-${libtype}-rgb-islow-icc-cmp PROPERTIES -+ DEPENDS djpeg-${libtype}-rgb-islow) +--- libjpeg-turbo-2.0.2.orig/CMakeLists.txt 2019-03-13 12:44:05.376162889 +0100 ++++ libjpeg-turbo-2.0.2/CMakeLists.txt 2019-03-13 12:45:59.156696193 +0100 +@@ -1003,7 +1003,8 @@ foreach(libtype ${TEST_LIBTYPES}) + DEPENDS djpeg-${libtype}-rgb-islow) add_bittest(jpegtran icc "-copy;all;-icc;${TESTIMAGES}/test2.icc" - testout_rgb_islow2.jpg testout_rgb_islow.jpg ${MD5_JPEG_RGB_ISLOW2}) ++++++ libjpeg-turbo-2.0.1.tar.gz -> libjpeg-turbo-2.0.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libjpeg-turbo-2.0.1/BUILDING.md new/libjpeg-turbo-2.0.2/BUILDING.md --- old/libjpeg-turbo-2.0.1/BUILDING.md 2018-11-12 20:20:28.000000000 +0100 +++ new/libjpeg-turbo-2.0.2/BUILDING.md 2019-02-14 05:03:31.000000000 +0100 @@ -525,7 +525,7 @@ Building libjpeg-turbo for Android ---------------------------------- -Building libjpeg-turbo for Android platforms requires the +Building libjpeg-turbo for Android platforms requires v13b or later of the [Android NDK](https://developer.android.com/tools/sdk/ndk). @@ -535,35 +535,21 @@ needs. # Set these variables to suit your needs - NDK_PATH={full path to the "ndk" directory-- for example, /opt/android/sdk/ndk-bundle} - BUILD_PLATFORM={the platform name for the NDK package you installed-- - for example, "windows-x86" or "linux-x86_64" or "darwin-x86_64"} - TOOLCHAIN_VERSION={"4.8", "4.9", "clang3.5", etc. This corresponds to a - toolchain directory under ${NDK_PATH}/toolchains/.} - ANDROID_VERSION={The minimum version of Android to support-- for example, + NDK_PATH={full path to the NDK directory-- for example, + /opt/android/android-ndk-r16b} + TOOLCHAIN={"gcc" or "clang"-- "gcc" must be used with NDK r16b and earlier, + and "clang" must be used with NDK r17c and later} + ANDROID_VERSION={the minimum version of Android to support-- for example, "16", "19", etc.} - # It should not be necessary to modify the rest - HOST=arm-linux-androideabi - SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-arm - export CFLAGS="-march=armv7-a -mfloat-abi=softfp -fprefetch-loop-arrays \ - -D__ANDROID_API__=${ANDROID_VERSION} --sysroot=${SYSROOT} \ - -isystem ${NDK_PATH}/sysroot/usr/include \ - -isystem ${NDK_PATH}/sysroot/usr/include/${HOST}" - export LDFLAGS=-pie - TOOLCHAIN=${NDK_PATH}/toolchains/${HOST}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM} - cd {build_directory} - - cat <<EOF >toolchain.cmake - set(CMAKE_SYSTEM_NAME Linux) - set(CMAKE_SYSTEM_PROCESSOR arm) - set(CMAKE_C_COMPILER ${TOOLCHAIN}/bin/${HOST}-gcc) - set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN}/${HOST}) - EOF - - cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \ - -DCMAKE_POSITION_INDEPENDENT_CODE=1 \ + cmake -G"Unix Makefiles" \ + -DANDROID_ABI=armeabi-v7a \ + -DANDROID_ARM_MODE=arm \ + -DANDROID_PLATFORM=android-${ANDROID_VERSION} \ + -DANDROID_TOOLCHAIN=${TOOLCHAIN} \ + -DCMAKE_ASM_FLAGS="--target=arm-linux-androideabi${ANDROID_VERSION}" \ + -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \ [additional CMake flags] {source_directory} make @@ -574,34 +560,21 @@ needs. # Set these variables to suit your needs - NDK_PATH={full path to the "ndk" directory-- for example, /opt/android/sdk/ndk-bundle} - BUILD_PLATFORM={the platform name for the NDK package you installed-- - for example, "windows-x86" or "linux-x86_64" or "darwin-x86_64"} - TOOLCHAIN_VERSION={"4.8", "4.9", "clang3.5", etc. This corresponds to a - toolchain directory under ${NDK_PATH}/toolchains/.} - ANDROID_VERSION={The minimum version of Android to support. "21" or later + NDK_PATH={full path to the NDK directory-- for example, + /opt/android/android-ndk-r16b} + TOOLCHAIN={"gcc" or "clang"-- "gcc" must be used with NDK r14b and earlier, + and "clang" must be used with NDK r17c and later} + ANDROID_VERSION={the minimum version of Android to support. "21" or later is required for a 64-bit build.} - # It should not be necessary to modify the rest - HOST=aarch64-linux-android - SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-arm64 - export CFLAGS="-D__ANDROID_API__=${ANDROID_VERSION} --sysroot=${SYSROOT} \ - -isystem ${NDK_PATH}/sysroot/usr/include \ - -isystem ${NDK_PATH}/sysroot/usr/include/${HOST}" - export LDFLAGS=-pie - TOOLCHAIN=${NDK_PATH}/toolchains/${HOST}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM} - cd {build_directory} - - cat <<EOF >toolchain.cmake - set(CMAKE_SYSTEM_NAME Linux) - set(CMAKE_SYSTEM_PROCESSOR aarch64) - set(CMAKE_C_COMPILER ${TOOLCHAIN}/bin/${HOST}-gcc) - set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN}/${HOST}) - EOF - - cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \ - -DCMAKE_POSITION_INDEPENDENT_CODE=1 \ + cmake -G"Unix Makefiles" \ + -DANDROID_ABI=arm64-v8a \ + -DANDROID_ARM_MODE=arm \ + -DANDROID_PLATFORM=android-${ANDROID_VERSION} \ + -DANDROID_TOOLCHAIN=${TOOLCHAIN} \ + -DCMAKE_ASM_FLAGS="--target=aarch64-linux-android${ANDROID_VERSION}" \ + -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \ [additional CMake flags] {source_directory} make @@ -612,34 +585,19 @@ needs. # Set these variables to suit your needs - NDK_PATH={full path to the "ndk" directory-- for example, /opt/android/sdk/ndk-bundle} - BUILD_PLATFORM={the platform name for the NDK package you installed-- - for example, "windows-x86" or "linux-x86_64" or "darwin-x86_64"} - TOOLCHAIN_VERSION={"4.8", "4.9", "clang3.5", etc. This corresponds to a - toolchain directory under ${NDK_PATH}/toolchains/.} + NDK_PATH={full path to the NDK directory-- for example, + /opt/android/android-ndk-r16b} + TOOLCHAIN={"gcc" or "clang"-- "gcc" must be used with NDK r14b and earlier, + and "clang" must be used with NDK r17c and later} ANDROID_VERSION={The minimum version of Android to support-- for example, "16", "19", etc.} - # It should not be necessary to modify the rest - HOST=i686-linux-android - SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-x86 - export CFLAGS="-D__ANDROID_API__=${ANDROID_VERSION} --sysroot=${SYSROOT} \ - -isystem ${NDK_PATH}/sysroot/usr/include \ - -isystem ${NDK_PATH}/sysroot/usr/include/${HOST}" - export LDFLAGS=-pie - TOOLCHAIN=${NDK_PATH}/toolchains/x86-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM} - cd {build_directory} - - cat <<EOF >toolchain.cmake - set(CMAKE_SYSTEM_NAME Linux) - set(CMAKE_SYSTEM_PROCESSOR i386) - set(CMAKE_C_COMPILER ${TOOLCHAIN}/bin/${HOST}-gcc) - set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN}/${HOST}) - EOF - - cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \ - -DCMAKE_POSITION_INDEPENDENT_CODE=1 \ + cmake -G"Unix Makefiles" \ + -DANDROID_ABI=x86 \ + -DANDROID_PLATFORM=android-${ANDROID_VERSION} \ + -DANDROID_TOOLCHAIN=${TOOLCHAIN} \ + -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \ [additional CMake flags] {source_directory} make @@ -650,45 +608,23 @@ needs. # Set these variables to suit your needs - NDK_PATH={full path to the "ndk" directory-- for example, /opt/android/sdk/ndk-bundle} - BUILD_PLATFORM={the platform name for the NDK package you installed-- - for example, "windows-x86" or "linux-x86_64" or "darwin-x86_64"} - TOOLCHAIN_VERSION={"4.8", "4.9", "clang3.5", etc. This corresponds to a - toolchain directory under ${NDK_PATH}/toolchains/.} - ANDROID_VERSION={The minimum version of Android to support. "21" or later + NDK_PATH={full path to the NDK directory-- for example, + /opt/android/android-ndk-r16b} + TOOLCHAIN={"gcc" or "clang"-- "gcc" must be used with NDK r14b and earlier, + and "clang" must be used with NDK r17c and later} + ANDROID_VERSION={the minimum version of Android to support. "21" or later is required for a 64-bit build.} - # It should not be necessary to modify the rest - HOST=x86_64-linux-android - SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-x86_64 - export CFLAGS="-D__ANDROID_API__=${ANDROID_VERSION} --sysroot=${SYSROOT} \ - -isystem ${NDK_PATH}/sysroot/usr/include \ - -isystem ${NDK_PATH}/sysroot/usr/include/${HOST}" - export LDFLAGS=-pie - TOOLCHAIN=${NDK_PATH}/toolchains/x86_64-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM} - cd {build_directory} - - cat <<EOF >toolchain.cmake - set(CMAKE_SYSTEM_NAME Linux) - set(CMAKE_SYSTEM_PROCESSOR x86_64) - set(CMAKE_C_COMPILER ${TOOLCHAIN}/bin/${HOST}-gcc) - set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN}/${HOST}) - EOF - - cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \ - -DCMAKE_POSITION_INDEPENDENT_CODE=1 \ + cmake -G"Unix Makefiles" \ + -DANDROID_ABI=x86_64 \ + -DANDROID_PLATFORM=android-${ANDROID_VERSION} \ + -DANDROID_TOOLCHAIN=${TOOLCHAIN} \ + -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \ [additional CMake flags] {source_directory} make -If building for Android 4.0.x (API level < 16) or earlier, remove -`-DCMAKE_POSITION_INDEPENDENT_CODE=1` from the CMake arguments and `-pie` from -`LDFLAGS`. - -If building on Windows, add `.exe` to the end of `CMAKE_C_COMPILER`. - - Advanced CMake Options ---------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libjpeg-turbo-2.0.1/CMakeLists.txt new/libjpeg-turbo-2.0.2/CMakeLists.txt --- old/libjpeg-turbo-2.0.1/CMakeLists.txt 2018-11-12 20:20:28.000000000 +0100 +++ new/libjpeg-turbo-2.0.2/CMakeLists.txt 2019-02-14 05:03:31.000000000 +0100 @@ -5,7 +5,7 @@ endif() project(libjpeg-turbo C) -set(VERSION 2.0.1) +set(VERSION 2.0.2) string(REPLACE "." ";" VERSION_TRIPLET ${VERSION}) list(GET VERSION_TRIPLET 0 VERSION_MAJOR) list(GET VERSION_TRIPLET 1 VERSION_MINOR) @@ -109,10 +109,6 @@ include(cmakescripts/GNUInstallDirs.cmake) -if(ENABLE_SHARED) - set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR}) -endif() - macro(report_directory var) if(CMAKE_INSTALL_${var} STREQUAL CMAKE_INSTALL_FULL_${var}) message(STATUS "CMAKE_INSTALL_${var} = ${CMAKE_INSTALL_${var}}") @@ -193,6 +189,10 @@ report_option(ENABLE_SHARED "Shared libraries") report_option(ENABLE_STATIC "Static libraries") +if(ENABLE_SHARED) + set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR}) +endif() + if(WITH_12BIT) set(WITH_ARITH_DEC 0) set(WITH_ARITH_ENC 0) @@ -470,8 +470,8 @@ # still work. file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map "VERS_1 { global: foo; local: *; }; VERS_2 { global: foo2; } VERS_1;") - set(CMAKE_REQUIRED_FLAGS "-Wl,-M,${CMAKE_CURRENT_BINARY_DIR}/conftest.map") - check_c_source_compiles("void foo() {} void foo2() {} int main(void) { return 0; }" + set(CMAKE_REQUIRED_FLAGS "-Wl,-M,${CMAKE_CURRENT_BINARY_DIR}/conftest.map -shared") + check_c_source_compiles("int foo() { return 0; } int foo2() { return 2; }" HAVE_MAPFILE) set(CMAKE_REQUIRED_FLAGS) file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/conftest.map) @@ -999,6 +999,8 @@ add_test(djpeg-${libtype}-rgb-islow-icc-cmp ${MD5CMP} b06a39d730129122e85c1363ed1bbc9e testout_rgb_islow.icc) + set_tests_properties(djpeg-${libtype}-rgb-islow-icc-cmp PROPERTIES + DEPENDS djpeg-${libtype}-rgb-islow) add_bittest(jpegtran icc "-copy;all;-icc;${TESTIMAGES}/test2.icc" testout_rgb_islow2.jpg testout_rgb_islow.jpg ${MD5_JPEG_RGB_ISLOW2}) @@ -1330,12 +1332,22 @@ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + if(NOT CMAKE_VERSION VERSION_LESS "3.1" AND MSVC AND + CMAKE_C_LINKER_SUPPORTS_PDB) + install(FILES "$<TARGET_PDB_FILE:turbojpeg>" + DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL) + endif() endif() if(ENABLE_STATIC) install(TARGETS turbojpeg-static ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) if(NOT ENABLE_SHARED) - install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/tjbench-static${EXE} + if(MSVC_IDE) + set(DIR "${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}") + else() + set(DIR ${CMAKE_CURRENT_BINARY_DIR}) + endif() + install(PROGRAMS ${DIR}/tjbench-static${EXE} DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME tjbench${EXE}) endif() endif() @@ -1346,11 +1358,16 @@ if(ENABLE_STATIC) install(TARGETS jpeg-static ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) if(NOT ENABLE_SHARED) - install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/cjpeg-static${EXE} + if(MSVC_IDE) + set(DIR "${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}") + else() + set(DIR ${CMAKE_CURRENT_BINARY_DIR}) + endif() + install(PROGRAMS ${DIR}/cjpeg-static${EXE} DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME cjpeg${EXE}) - install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/djpeg-static${EXE} + install(PROGRAMS ${DIR}/djpeg-static${EXE} DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME djpeg${EXE}) - install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/jpegtran-static${EXE} + install(PROGRAMS ${DIR}/jpegtran-static${EXE} DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME jpegtran${EXE}) endif() endif() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libjpeg-turbo-2.0.1/ChangeLog.md new/libjpeg-turbo-2.0.2/ChangeLog.md --- old/libjpeg-turbo-2.0.1/ChangeLog.md 2018-11-12 20:20:28.000000000 +0100 +++ new/libjpeg-turbo-2.0.2/ChangeLog.md 2019-02-14 05:03:31.000000000 +0100 @@ -1,3 +1,43 @@ +2.0.2 +===== + +### Significant changes relative to 2.0.1: + +1. Fixed a regression introduced by 2.0.1[5] that prevented a runtime search +path (rpath) from being embedded in the libjpeg-turbo shared libraries and +executables for macOS and iOS. This caused a fatal error of the form +"dyld: Library not loaded" when attempting to use one of the executables, +unless `DYLD_LIBRARY_PATH` was explicitly set to the location of the +libjpeg-turbo shared libraries. + +2. Fixed an integer overflow and subsequent segfault (CVE-2018-20330) that +occurred when attempting to load a BMP file with more than 1 billion pixels +using the `tjLoadImage()` function. + +3. Fixed a buffer overrun (CVE-2018-19664) that occurred when attempting to +decompress a specially-crafted malformed JPEG image to a 256-color BMP using +djpeg. + +4. Fixed a floating point exception that occurred when attempting to +decompress a specially-crafted malformed JPEG image with a specified image +width or height of 0 using the C version of TJBench. + +5. The TurboJPEG API will now decompress 4:4:4 JPEG images with 2x1, 1x2, 3x1, +or 1x3 luminance and chrominance sampling factors. This is a non-standard way +of specifying 1x subsampling (normally 4:4:4 JPEGs have 1x1 luminance and +chrominance sampling factors), but the JPEG format and the libjpeg API both +allow it. + +6. Fixed a regression introduced by 2.0 beta1[7] that caused djpeg to generate +incorrect PPM images when used with the `-colors` option. + +7. Fixed an issue whereby a static build of libjpeg-turbo (a build in which +`ENABLE_SHARED` is `0`) could not be installed using the Visual Studio IDE. + +8. Fixed a severe performance issue in the Loongson MMI SIMD extensions that +occurred when compressing RGB images whose image rows were not 64-bit-aligned. + + 2.0.1 ===== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libjpeg-turbo-2.0.1/LICENSE.md new/libjpeg-turbo-2.0.2/LICENSE.md --- old/libjpeg-turbo-2.0.1/LICENSE.md 2018-11-12 20:20:28.000000000 +0100 +++ new/libjpeg-turbo-2.0.2/LICENSE.md 2019-02-14 05:03:31.000000000 +0100 @@ -14,7 +14,7 @@ This license covers the TurboJPEG API library and associated programs, as well as the build system. -- The zlib License, which is listed below +- The [zlib License](https://opensource.org/licenses/Zlib) This license is a subset of the other two, and it covers the libjpeg-turbo SIMD extensions. @@ -66,7 +66,7 @@ 2. If your binary distribution includes or uses the TurboJPEG API, then your product documentation must include the text of the Modified BSD - License. + License (see below.) **Origin** - Clause 2 of the Modified BSD License @@ -91,7 +91,8 @@ The Modified (3-clause) BSD License =================================== -Copyright (C)\<YEAR\> \<AUTHOR\>. All Rights Reserved. +Copyright (C)2009-2019 D. R. Commander. All Rights Reserved. +Copyright (C)2015 Viktor Szathmáry. All Rights Reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -118,28 +119,6 @@ POSSIBILITY OF SUCH DAMAGE. -The zlib License -================ - -Copyright (C) \<YEAR\>, \<AUTHOR\>. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. - - Why Three Licenses? =================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libjpeg-turbo-2.0.1/cmakescripts/GNUInstallDirs.cmake new/libjpeg-turbo-2.0.2/cmakescripts/GNUInstallDirs.cmake --- old/libjpeg-turbo-2.0.1/cmakescripts/GNUInstallDirs.cmake 2018-11-12 20:20:28.000000000 +0100 +++ new/libjpeg-turbo-2.0.2/cmakescripts/GNUInstallDirs.cmake 2019-02-14 05:03:31.000000000 +0100 @@ -118,7 +118,7 @@ # absolute paths where necessary, using the same logic. #============================================================================= -# Copyright 2016 D. R. Commander +# Copyright 2016, 2019 D. R. Commander # Copyright 2016 Dmitry Marakasov # Copyright 2016 Roger Leigh # Copyright 2015 Alex Turbov @@ -184,7 +184,7 @@ "${docstring} (Default: ${CMAKE_INSTALL_DEFAULT_${var}})" ${_GNUInstallDirs_CMAKE_INSTALL_FORCE_${var}}) - if(NOT "${CMAKE_INSTALL_${var}}" STREQUAL "${CMAKE_INSTALL_DEFAULT_${var}}") + if(NOT CMAKE_INSTALL_${var} STREQUAL CMAKE_INSTALL_DEFAULT_${var}) unset(_GNUInstallDirs_CMAKE_INSTALL_DEFAULT_${var} CACHE) endif() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libjpeg-turbo-2.0.1/java/TJBench.java new/libjpeg-turbo-2.0.2/java/TJBench.java --- old/libjpeg-turbo-2.0.1/java/TJBench.java 2018-11-12 20:20:28.000000000 +0100 +++ new/libjpeg-turbo-2.0.2/java/TJBench.java 2019-02-14 05:03:31.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C)2009-2014, 2016-2018 D. R. Commander. All Rights Reserved. + * Copyright (C)2009-2014, 2016-2019 D. R. Commander. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -202,7 +202,9 @@ int width = doTile ? Math.min(tilew, w - x) : scaledw; int height = doTile ? Math.min(tileh, h - y) : scaledh; - tjd.setSourceImage(jpegBuf[tile], jpegSize[tile]); + try { + tjd.setSourceImage(jpegBuf[tile], jpegSize[tile]); + } catch (TJException e) { handleTJException(e); } if (doYUV) { yuvImage.setBuf(yuvImage.getBuf(), width, yuvPad, height, subsamp); try { @@ -500,7 +502,9 @@ tjt = new TJTransformer(); - tjt.setSourceImage(srcBuf, srcSize); + try { + tjt.setSourceImage(srcBuf, srcSize); + } catch (TJException e) { handleTJException(e); } w = tjt.getWidth(); h = tjt.getHeight(); subsamp = tjt.getSubsamp(); @@ -607,7 +611,9 @@ elapsed = 0.; while (true) { start = getTime(); - tjt.transform(jpegBuf, t, flags); + try { + tjt.transform(jpegBuf, t, flags); + } catch (TJException e) { handleTJException(e); } jpegSize = tjt.getTransformedSizes(); elapsed += getTime() - start; if (iter >= 0) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libjpeg-turbo-2.0.1/jversion.h new/libjpeg-turbo-2.0.2/jversion.h --- old/libjpeg-turbo-2.0.1/jversion.h 2018-11-12 20:20:28.000000000 +0100 +++ new/libjpeg-turbo-2.0.2/jversion.h 2019-02-14 05:03:31.000000000 +0100 @@ -4,7 +4,7 @@ * This file was part of the Independent JPEG Group's software: * Copyright (C) 1991-2012, Thomas G. Lane, Guido Vollbeding. * libjpeg-turbo Modifications: - * Copyright (C) 2010, 2012-2018, D. R. Commander. + * Copyright (C) 2010, 2012-2019, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -36,7 +36,7 @@ */ #define JCOPYRIGHT \ - "Copyright (C) 2009-2018 D. R. Commander\n" \ + "Copyright (C) 2009-2019 D. R. Commander\n" \ "Copyright (C) 2011-2016 Siarhei Siamashka\n" \ "Copyright (C) 2015-2016, 2018 Matthieu Darbois\n" \ "Copyright (C) 2015 Intel Corporation\n" \ @@ -49,4 +49,4 @@ "Copyright (C) 1991-2016 Thomas G. Lane, Guido Vollbeding" #define JCOPYRIGHT_SHORT \ - "Copyright (C) 1991-2018 The libjpeg-turbo Project and many others" + "Copyright (C) 1991-2019 The libjpeg-turbo Project and many others" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libjpeg-turbo-2.0.1/release/rpm.spec.in new/libjpeg-turbo-2.0.2/release/rpm.spec.in --- old/libjpeg-turbo-2.0.1/release/rpm.spec.in 2018-11-12 20:20:28.000000000 +0100 +++ new/libjpeg-turbo-2.0.2/release/rpm.spec.in 2019-02-14 05:03:31.000000000 +0100 @@ -1,7 +1,7 @@ +%global _docdir %{_defaultdocdir}/%{name}-%{version} %define _prefix @CMAKE_INSTALL_PREFIX@ %define _bindir @CMAKE_INSTALL_FULL_BINDIR@ %define _datarootdir @CMAKE_INSTALL_FULL_DATAROOTDIR@ -%define _docdir %{_defaultdocdir}/%{name}-%{version} %define _includedir @CMAKE_INSTALL_FULL_INCLUDEDIR@ %define _javadir @CMAKE_INSTALL_FULL_JAVADIR@ %define _mandir @CMAKE_INSTALL_FULL_MANDIR@ @@ -43,7 +43,7 @@ Release: @BUILD@ License: BSD-style BuildRoot: %{_blddir}/%{name}-buildroot-%{version}-%{release} -Prereq: /sbin/ldconfig +Requires: /sbin/ldconfig %if "%{_bits}" == "64" Provides: %{name} = %{version}-%{release}, @CMAKE_PROJECT_NAME@ = %{version}-%{release}, libturbojpeg.so()(64bit) %else @@ -183,7 +183,7 @@ %if "%{_enable_static}" == "1" %{_libdir}/libjpeg.a %endif -%{_libdir}/pkgconfig +%dir %{_libdir}/pkgconfig %{_libdir}/pkgconfig/libjpeg.pc %if "%{_with_turbojpeg}" == "1" %if "%{_enable_shared}" == "1" || "%{_with_java}" == "1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libjpeg-turbo-2.0.1/sharedlib/CMakeLists.txt new/libjpeg-turbo-2.0.2/sharedlib/CMakeLists.txt --- old/libjpeg-turbo-2.0.1/sharedlib/CMakeLists.txt 2018-11-12 20:20:28.000000000 +0100 +++ new/libjpeg-turbo-2.0.2/sharedlib/CMakeLists.txt 2019-02-14 05:03:31.000000000 +0100 @@ -52,7 +52,8 @@ LINK_FLAGS "${MAPFLAG}${CMAKE_CURRENT_BINARY_DIR}/../libjpeg.map") endif() if(MSVC) - set_target_properties(jpeg PROPERTIES SUFFIX ${SO_MAJOR_VERSION}.dll) + set_target_properties(jpeg PROPERTIES + RUNTIME_OUTPUT_NAME jpeg${SO_MAJOR_VERSION}) # The jsimd_*.c file is built using /MT, so this prevents a linker warning. set_target_properties(jpeg PROPERTIES LINK_FLAGS "/NODEFAULTLIB:LIBCMT /NODEFAULTLIB:LIBCMTD") elseif(MINGW) @@ -91,3 +92,8 @@ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +if(NOT CMAKE_VERSION VERSION_LESS "3.1" AND MSVC AND + CMAKE_C_LINKER_SUPPORTS_PDB) + install(FILES "$<TARGET_PDB_FILE:jpeg>" + DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL) +endif() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libjpeg-turbo-2.0.1/simd/loongson/jccolext-mmi.c new/libjpeg-turbo-2.0.2/simd/loongson/jccolext-mmi.c --- old/libjpeg-turbo-2.0.1/simd/loongson/jccolext-mmi.c 2018-11-12 20:20:28.000000000 +0100 +++ new/libjpeg-turbo-2.0.2/simd/loongson/jccolext-mmi.c 2019-02-14 05:03:31.000000000 +0100 @@ -2,12 +2,13 @@ * Loongson MMI optimizations for libjpeg-turbo * * Copyright 2009 Pierre Ossman <[email protected]> for Cendio AB - * Copyright (C) 2014-2015, D. R. Commander. All Rights Reserved. - * Copyright (C) 2016-2017, Loongson Technology Corporation Limited, BeiJing. + * Copyright (C) 2014-2015, 2019, D. R. Commander. All Rights Reserved. + * Copyright (C) 2016-2018, Loongson Technology Corporation Limited, BeiJing. * All Rights Reserved. * Authors: ZhuChen <[email protected]> * SunZhangzhi <[email protected]> * CaiWanwei <[email protected]> + * ZhangLixia <[email protected]> * * Based on the x86 SIMD extension for IJG JPEG library * Copyright (C) 1999-2006, MIYASAKA Masaru. @@ -184,9 +185,15 @@ "$14", "memory" ); } else { - mmA = _mm_load_si64((__m64 *)&inptr[0]); - mmG = _mm_load_si64((__m64 *)&inptr[8]); - mmF = _mm_load_si64((__m64 *)&inptr[16]); + if (!(((long)inptr) & 7)) { + mmA = _mm_load_si64((__m64 *)&inptr[0]); + mmG = _mm_load_si64((__m64 *)&inptr[8]); + mmF = _mm_load_si64((__m64 *)&inptr[16]); + } else { + mmA = _mm_loadu_si64((__m64 *)&inptr[0]); + mmG = _mm_loadu_si64((__m64 *)&inptr[8]); + mmF = _mm_loadu_si64((__m64 *)&inptr[16]); + } inptr += RGB_PIXELSIZE * 8; } mmD = mmA; @@ -268,10 +275,17 @@ : "$f0", "$f2", "$8", "$9", "$10", "$11", "$13", "memory" ); } else { - mmA = _mm_load_si64((__m64 *)&inptr[0]); - mmF = _mm_load_si64((__m64 *)&inptr[8]); - mmD = _mm_load_si64((__m64 *)&inptr[16]); - mmC = _mm_load_si64((__m64 *)&inptr[24]); + if (!(((long)inptr) & 7)) { + mmA = _mm_load_si64((__m64 *)&inptr[0]); + mmF = _mm_load_si64((__m64 *)&inptr[8]); + mmD = _mm_load_si64((__m64 *)&inptr[16]); + mmC = _mm_load_si64((__m64 *)&inptr[24]); + } else { + mmA = _mm_loadu_si64((__m64 *)&inptr[0]); + mmF = _mm_loadu_si64((__m64 *)&inptr[8]); + mmD = _mm_loadu_si64((__m64 *)&inptr[16]); + mmC = _mm_loadu_si64((__m64 *)&inptr[24]); + } inptr += RGB_PIXELSIZE * 8; } mmB = mmA; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libjpeg-turbo-2.0.1/simd/loongson/loongson-mmintrin.h new/libjpeg-turbo-2.0.2/simd/loongson/loongson-mmintrin.h --- old/libjpeg-turbo-2.0.1/simd/loongson/loongson-mmintrin.h 2018-11-12 20:20:28.000000000 +0100 +++ new/libjpeg-turbo-2.0.2/simd/loongson/loongson-mmintrin.h 2019-02-14 05:03:31.000000000 +0100 @@ -1,8 +1,9 @@ /* * Loongson MMI optimizations for libjpeg-turbo * - * Copyright (C) 2016-2017, Loongson Technology Corporation Limited, BeiJing. + * Copyright (C) 2016-2018, Loongson Technology Corporation Limited, BeiJing. * All Rights Reserved. + * Copyright (C) 2019, D. R. Commander. All Rights Reserved. * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages @@ -41,7 +42,7 @@ /********** Set Operations **********/ -extern __inline __m64 +extern __inline __m64 FUNCTION_ATTRIBS _mm_setzero_si64(void) { return 0.0; @@ -1245,6 +1246,22 @@ asm("ldc1 %0, %1\n\t" : "=f" (ret) : "m" (*src) + : "memory" + ); + + return ret; +} + +extern __inline __m64 FUNCTION_ATTRIBS +_mm_loadu_si64(const __m64 *src) +{ + __m64 ret; + + asm("gsldlc1 %0, 7(%1)\n\t" + "gsldrc1 %0, 0(%1)\n\t" + : "=f" (ret) + : "r" (src) + : "memory" ); return ret; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libjpeg-turbo-2.0.1/tjbench.c new/libjpeg-turbo-2.0.2/tjbench.c --- old/libjpeg-turbo-2.0.1/tjbench.c 2018-11-12 20:20:28.000000000 +0100 +++ new/libjpeg-turbo-2.0.2/tjbench.c 2019-02-14 05:03:31.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C)2009-2018 D. R. Commander. All Rights Reserved. + * Copyright (C)2009-2019 D. R. Commander. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -139,7 +139,7 @@ unsigned long *jpegSize, unsigned char *dstBuf, int w, int h, int subsamp, int jpegQual, char *fileName, int tilew, int tileh) { - char tempStr[1024], sizeStr[20] = "\0", qualStr[6] = "\0", *ptr; + char tempStr[1024], sizeStr[20] = "\0", qualStr[13] = "\0", *ptr; FILE *file = NULL; tjhandle handle = NULL; int row, col, iter = 0, dstBufAlloc = 0, retval = 0; @@ -152,8 +152,8 @@ unsigned char *dstPtr, *dstPtr2, *yuvBuf = NULL; if (jpegQual > 0) { - snprintf(qualStr, 6, "_Q%d", jpegQual); - qualStr[5] = 0; + snprintf(qualStr, 13, "_Q%d", jpegQual); + qualStr[12] = 0; } if ((handle = tjInitDecompress()) == NULL) @@ -541,6 +541,8 @@ if (tjDecompressHeader3(handle, srcBuf, srcSize, &w, &h, &subsamp, &cs) == -1) _throwtj("executing tjDecompressHeader3()"); + if (w < 1 || h < 1) + _throw("reading JPEG header", "Invalid image dimensions"); if (cs == TJCS_YCCK || cs == TJCS_CMYK) { pf = TJPF_CMYK; ps = tjPixelSize[pf]; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libjpeg-turbo-2.0.1/turbojpeg.c new/libjpeg-turbo-2.0.2/turbojpeg.c --- old/libjpeg-turbo-2.0.1/turbojpeg.c 2018-11-12 20:20:28.000000000 +0100 +++ new/libjpeg-turbo-2.0.2/turbojpeg.c 2019-02-14 05:03:31.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C)2009-2018 D. R. Commander. All Rights Reserved. + * Copyright (C)2009-2019 D. R. Commander. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -359,6 +359,23 @@ retval = i; break; } } + /* Handle 4:4:4 images whose sampling factors are specified in + non-standard ways. */ + if (dinfo->comp_info[0].h_samp_factor * + dinfo->comp_info[0].v_samp_factor <= + D_MAX_BLOCKS_IN_MCU / pixelsize[i] && i == TJSAMP_444) { + int match = 0; + for (k = 1; k < dinfo->num_components; k++) { + if (dinfo->comp_info[i].h_samp_factor == + dinfo->comp_info[0].h_samp_factor && + dinfo->comp_info[i].v_samp_factor == + dinfo->comp_info[0].v_samp_factor) + match++; + if (match == dinfo->num_components - 1) { + retval = i; break; + } + } + } } } return retval; @@ -1960,7 +1977,8 @@ int align, int *height, int *pixelFormat, int flags) { - int retval = 0, tempc, pitch; + int retval = 0, tempc; + size_t pitch; tjhandle handle = NULL; tjinstance *this; j_compress_ptr cinfo = NULL; @@ -2013,7 +2031,9 @@ *pixelFormat = cs2pf[cinfo->in_color_space]; pitch = PAD((*width) * tjPixelSize[*pixelFormat], align); - if ((dstBuf = (unsigned char *)malloc(pitch * (*height))) == NULL) + if ((unsigned long long)pitch * (unsigned long long)(*height) > + (unsigned long long)((size_t)-1) || + (dstBuf = (unsigned char *)malloc(pitch * (*height))) == NULL) _throwg("tjLoadImage(): Memory allocation failure"); if (setjmp(this->jerr.setjmp_buffer)) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libjpeg-turbo-2.0.1/wrbmp.c new/libjpeg-turbo-2.0.2/wrbmp.c --- old/libjpeg-turbo-2.0.1/wrbmp.c 2018-11-12 20:20:28.000000000 +0100 +++ new/libjpeg-turbo-2.0.2/wrbmp.c 2019-02-14 05:03:31.000000000 +0100 @@ -5,7 +5,7 @@ * Copyright (C) 1994-1996, Thomas G. Lane. * libjpeg-turbo Modifications: * Copyright (C) 2013, Linaro Limited. - * Copyright (C) 2014-2015, 2017, D. R. Commander. + * Copyright (C) 2014-2015, 2017, 2019, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -303,9 +303,7 @@ int bits_per_pixel, cmap_entries; /* Compute colormap size and total file size */ - if (cinfo->out_color_space == JCS_RGB || - (cinfo->out_color_space >= JCS_EXT_RGB && - cinfo->out_color_space <= JCS_EXT_ARGB)) { + if (IsExtRGB(cinfo->out_color_space)) { if (cinfo->quantize_colors) { /* Colormapped RGB */ bits_per_pixel = 8; @@ -499,15 +497,14 @@ if (cinfo->out_color_space == JCS_GRAYSCALE) { dest->pub.put_pixel_rows = put_gray_rows; - } else if (cinfo->out_color_space == JCS_RGB || - (cinfo->out_color_space >= JCS_EXT_RGB && - cinfo->out_color_space <= JCS_EXT_ARGB)) { + } else if (IsExtRGB(cinfo->out_color_space)) { if (cinfo->quantize_colors) dest->pub.put_pixel_rows = put_gray_rows; else dest->pub.put_pixel_rows = put_pixel_rows; - } else if (cinfo->out_color_space == JCS_RGB565 || - cinfo->out_color_space == JCS_CMYK) { + } else if (!cinfo->quantize_colors && + (cinfo->out_color_space == JCS_RGB565 || + cinfo->out_color_space == JCS_CMYK)) { dest->pub.put_pixel_rows = put_pixel_rows; } else { ERREXIT(cinfo, JERR_BMP_COLORSPACE); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libjpeg-turbo-2.0.1/wrppm.c new/libjpeg-turbo-2.0.2/wrppm.c --- old/libjpeg-turbo-2.0.1/wrppm.c 2018-11-12 20:20:28.000000000 +0100 +++ new/libjpeg-turbo-2.0.2/wrppm.c 2019-02-14 05:03:31.000000000 +0100 @@ -5,7 +5,7 @@ * Copyright (C) 1991-1996, Thomas G. Lane. * Modified 2009 by Guido Vollbeding. * libjpeg-turbo Modifications: - * Copyright (C) 2017, D. R. Commander. + * Copyright (C) 2017, 2019, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * @@ -256,6 +256,8 @@ case JCS_EXT_ABGR: case JCS_EXT_ARGB: case JCS_CMYK: + if (!IsExtRGB(cinfo->out_color_space) && cinfo->quantize_colors) + ERREXIT(cinfo, JERR_PPM_COLORSPACE); /* emit header for raw PPM format */ fprintf(dest->pub.output_file, "P6\n%ld %ld\n%d\n", (long)cinfo->output_width, (long)cinfo->output_height, PPM_MAXVAL); @@ -337,13 +339,14 @@ ((j_common_ptr)cinfo, JPOOL_IMAGE, cinfo->output_width * cinfo->output_components, (JDIMENSION)1); dest->pub.buffer_height = 1; - if (IsExtRGB(cinfo->out_color_space)) - dest->pub.put_pixel_rows = put_rgb; - else if (cinfo->out_color_space == JCS_CMYK) - dest->pub.put_pixel_rows = put_cmyk; - else if (!cinfo->quantize_colors) - dest->pub.put_pixel_rows = copy_pixel_rows; - else if (cinfo->out_color_space == JCS_GRAYSCALE) + if (!cinfo->quantize_colors) { + if (IsExtRGB(cinfo->out_color_space)) + dest->pub.put_pixel_rows = put_rgb; + else if (cinfo->out_color_space == JCS_CMYK) + dest->pub.put_pixel_rows = put_cmyk; + else + dest->pub.put_pixel_rows = copy_pixel_rows; + } else if (cinfo->out_color_space == JCS_GRAYSCALE) dest->pub.put_pixel_rows = put_demapped_gray; else dest->pub.put_pixel_rows = put_demapped_rgb;
