head 1.3; access; symbols pkgsrc-2026Q2:1.2.0.28 pkgsrc-2026Q2-base:1.2 pkgsrc-2026Q1:1.2.0.26 pkgsrc-2026Q1-base:1.2 pkgsrc-2025Q4:1.2.0.24 pkgsrc-2025Q4-base:1.2 pkgsrc-2025Q3:1.2.0.22 pkgsrc-2025Q3-base:1.2 pkgsrc-2025Q2:1.2.0.20 pkgsrc-2025Q2-base:1.2 pkgsrc-2025Q1:1.2.0.18 pkgsrc-2025Q1-base:1.2 pkgsrc-2024Q4:1.2.0.16 pkgsrc-2024Q4-base:1.2 pkgsrc-2024Q3:1.2.0.14 pkgsrc-2024Q3-base:1.2 pkgsrc-2024Q2:1.2.0.12 pkgsrc-2024Q2-base:1.2 pkgsrc-2024Q1:1.2.0.10 pkgsrc-2024Q1-base:1.2 pkgsrc-2023Q4:1.2.0.8 pkgsrc-2023Q4-base:1.2 pkgsrc-2023Q3:1.2.0.6 pkgsrc-2023Q3-base:1.2 pkgsrc-2023Q2:1.2.0.4 pkgsrc-2023Q2-base:1.2 pkgsrc-2023Q1:1.2.0.2 pkgsrc-2023Q1-base:1.2 pkgsrc-2022Q4:1.1.0.14 pkgsrc-2022Q4-base:1.1 pkgsrc-2022Q3:1.1.0.12 pkgsrc-2022Q3-base:1.1 pkgsrc-2022Q2:1.1.0.10 pkgsrc-2022Q2-base:1.1 pkgsrc-2022Q1:1.1.0.8 pkgsrc-2022Q1-base:1.1 pkgsrc-2021Q4:1.1.0.6 pkgsrc-2021Q4-base:1.1 pkgsrc-2021Q3:1.1.0.4 pkgsrc-2021Q3-base:1.1 pkgsrc-2021Q2:1.1.0.2 pkgsrc-2021Q2-base:1.1; locks; strict; comment @ * @; 1.3 date 2026.06.30.20.07.33; author adam; state dead; branches; next 1.2; commitid 9cKu7YknkQaHqRLG; 1.2 date 2023.02.01.12.39.30; author adam; state Exp; branches; next 1.1; commitid BLW18ljrXre1YObE; 1.1 date 2021.04.26.08.18.48; author adam; state Exp; branches; next ; commitid v7jWFwGrKyOZhMQC; desc @@ 1.3 log @libjpeg-turbo: updated to 3.2.0 3.2.0 Fixed a regression introduced by 3.2 beta1[9] that broke Arm64EC Windows builds. Hardened the PNG writer (which is used by djpeg and tj3SaveImage*()) against applications that may erroneously attempt to write sample values that are out of range for the specified output data precision. This could have caused a buffer overrun in the PNG writer's rescale array if the output data precision was not 8 or 16 bits. The buffer overrun did not likely pose a security risk, since tj3SaveImage*() is not exposed to arbitrary external input data and since a caller that abused the API in the aforementioned manner could never work properly. Hardened the libjpeg API against hypothetical applications that may erroneously call jpeg_crop_scanline() with buffered-image mode and raw data output enabled. jpeg_crop_scanline() does not work with raw data output, but due to an oversight, it did not throw an error if both buffered-image mode and raw data output were enabled. If a hypothetical application aborted a normal decompression operation without reading any scanlines, started a new decompression operation using the same libjpeg instance with buffered-image mode and raw data output enabled, then called jpeg_crop_scanline() with arguments that would have caused any of the component planes to be cropped to a width of 1 sample, jpeg_crop_scanline() would have used freed memory. However, this did not likely pose a security risk, since an application that abused the API in the aforementioned manner could never work properly. Fixed a buffer overrun and subsequent segfault in jpegtran that occurred when attempting to use the -crop and -trim options to expand the width of an image narrower than one iMCU, discard partial iMCUs, and fill each block in the expanded region with the DC coefficient of the nearest block in the input image ("flatten.") Similarly, fixed an infinite loop that occurred when attempting to use the -crop and -trim options to expand the width of an image narrower than one iMCU, discard partial iMCUs, and fill the expanded region with repeated reflections of the input image ("reflect.") When the only iMCU column in the input image is partial and partial iMCUs are trimmed, the flatten and reflect extensions cannot work properly, so jpegtran now throws an error if that is the case. These issues were confined to the jpegtran application and thus did not pose a security risk. @ text @$NetBSD: patch-simd_arm__aarch64_jsimd.c,v 1.2 2023/02/01 12:39:30 adam Exp $ NetBSD support. --- simd/arm/aarch64/jsimd.c.orig 2023-01-28 00:24:41.000000000 +0000 +++ simd/arm/aarch64/jsimd.c @@@@ -25,6 +25,9 @@@@ #include "../../jsimd.h" #include +#if defined(__NetBSD__) +#include +#endif #define JSIMD_FASTLD3 1 #define JSIMD_FASTST3 2 @@@@ -124,6 +127,9 @@@@ init_simd(void) #endif #if defined(__linux__) || defined(ANDROID) || defined(__ANDROID__) int bufsize = 1024; /* an initial guess for the line buffer size limit */ +#elif defined(__NetBSD__) + int neon_present; + size_t len; #endif if (simd_support != ~0U) @@@@ -138,6 +144,10 @@@@ init_simd(void) if (bufsize > SOMEWHAT_SANE_PROC_CPUINFO_SIZE_LIMIT) break; } +#elif defined(__NetBSD__) + if (sysctlbyname("machdep.neon_present", &neon_present, &len, NULL, 0) == 0 + && neon_present != 0) + simd_support |= JSIMD_NEON; #endif #ifndef NO_GETENV @ 1.2 log @libjpeg-turbo: updated to 2.1.5 Significant changes relative to 2.1.4 Fixed issues in the build system whereby, when using the Ninja Multi-Config CMake generator, a static build of libjpeg-turbo (a build in which ENABLE_SHARED is 0) could not be installed, a Windows installer could not be built, and the Java regression tests failed. Fixed a regression introduced by 2.0 beta1[15] that caused a buffer overrun in the progressive Huffman encoder when attempting to transform a specially-crafted malformed 12-bit-per-component JPEG image into a progressive 12-bit-per-component JPEG image using a 12-bit-per-component build of libjpeg-turbo (-DWITH_12BIT=1.) Given that the buffer overrun was fully contained within the progressive Huffman encoder structure and did not cause a segfault or other user-visible errant behavior, given that the lossless transformer (unlike the decompressor) is not generally exposed to arbitrary data exploits, and given that 12-bit-per-component builds of libjpeg-turbo are uncommon, this issue did not likely pose a security risk. Fixed an issue whereby, when using a 12-bit-per-component build of libjpeg-turbo (-DWITH_12BIT=1), passing samples with values greater than 4095 or less than 0 to jpeg_write_scanlines() caused a buffer overrun or underrun in the RGB-to-YCbCr color converter. Fixed a floating point exception that occurred when attempting to use the jpegtran -drop and -trim options to losslessly transform a specially-crafted malformed JPEG image. Fixed an issue in tjBufSizeYUV2() whereby it returned a bogus result, rather than throwing an error, if the align parameter was not a power of 2. Fixed a similar issue in tjCompressFromYUV() whereby it generated a corrupt JPEG image in certain cases, rather than throwing an error, if the align parameter was not a power of 2. Fixed an issue whereby tjDecompressToYUV2(), which is a wrapper for tjDecompressToYUVPlanes(), used the desired YUV image dimensions rather than the actual scaled image dimensions when computing the plane pointers and strides to pass to tjDecompressToYUVPlanes(). This caused a buffer overrun and subsequent segfault if the desired image dimensions exceeded the scaled image dimensions. Fixed an issue whereby, when decompressing a 12-bit-per-component JPEG image (-DWITH_12BIT=1) using an alpha-enabled output color space such as JCS_EXT_RGBA, the alpha channel was set to 255 rather than 4095. Fixed an issue whereby the Java version of TJBench did not accept a range of quality values. Fixed an issue whereby, when -progressive was passed to TJBench, the JPEG input image was not transformed into a progressive JPEG image prior to decompression. @ text @d1 1 a1 1 $NetBSD$ @ 1.1 log @libjpeg-turbo: updated to 2.1.0 2.1.0 Significant changes relative to 2.1 beta1 Fixed a regression introduced by 2.1 beta1[6(b)] whereby attempting to decompress certain progressive JPEG images with one or more component planes of width 8 or less caused a buffer overrun. Fixed a regression introduced by 2.1 beta1[6(b)] whereby attempting to decompress a specially-crafted malformed progressive JPEG image caused the block smoothing algorithm to read from uninitialized memory. Fixed an issue in the Arm Neon SIMD Huffman encoders that caused the encoders to generate incorrect results when using the Clang compiler with Visual Studio. Fixed a floating point exception (CVE-2021-20205) that occurred when attempting to compress a specially-crafted malformed GIF image with a specified image width of 0 using cjpeg. Fixed a regression introduced by 2.0 beta1[15] whereby attempting to generate a progressive JPEG image on an SSE2-capable CPU using a scan script containing one or more scans with lengths divisible by 32 and non-zero successive approximation low bit positions would, under certain circumstances, result in an error ("Missing Huffman code table entry") and an invalid JPEG image. Introduced a new flag (TJFLAG_LIMITSCANS in the TurboJPEG C API and TJ.FLAG_LIMIT_SCANS in the TurboJPEG Java API) and a corresponding TJBench command-line argument (-limitscans) that causes the TurboJPEG decompression and transform functions/operations to return/throw an error if a progressive JPEG image contains an unreasonably large number of scans. This allows applications that use the TurboJPEG API to guard against an exploit of the progressive JPEG format described in the report "Two Issues with the JPEG Standard". The PPM reader now throws an error, rather than segfaulting (due to a buffer overrun) or generating incorrect pixels, if an application attempts to use the tjLoadImage() function to load a 16-bit binary PPM file (a binary PPM file with a maximum value greater than 255) into a grayscale image buffer or to load a 16-bit binary PGM file into an RGB image buffer. Fixed an issue in the PPM reader that caused incorrect pixels to be generated when using the tjLoadImage() function to load a 16-bit binary PPM file into an extended RGB image buffer. Fixed an issue whereby, if a JPEG buffer was automatically re-allocated by one of the TurboJPEG compression or transform functions and an error subsequently occurred during compression or transformation, the JPEG buffer pointer passed by the application was not updated when the function returned. 2.0.90 (2.1 beta1) Significant changes relative to 2.0.6: The build system, x86-64 SIMD extensions, and accelerated Huffman codec now support the x32 ABI on Linux, which allows for using x86-64 instructions with 32-bit pointers. The x32 ABI is generally enabled by adding -mx32 to the compiler flags. Caveats: CMake 3.9.0 or later is required in order for the build system to automatically detect an x32 build. Java does not support the x32 ABI, and thus the TurboJPEG Java API will automatically be disabled with x32 builds. Added Loongson MMI SIMD implementations of the RGB-to-grayscale, 4:2:2 fancy chroma upsampling, 4:2:2 and 4:2:0 merged chroma upsampling/color conversion, and fast integer DCT/IDCT algorithms. Relative to libjpeg-turbo 2.0.x, this speeds up: the compression of RGB source images into grayscale JPEG images by approximately 20% the decompression of 4:2:2 JPEG images by approximately 40-60% when using fancy upsampling the decompression of 4:2:2 and 4:2:0 JPEG images by approximately 15-20% when using merged upsampling the compression of RGB source images by approximately 30-45% when using the fast integer DCT the decompression of JPEG images into RGB destination images by approximately 2x when using the fast integer IDCT The overall decompression speedup for RGB images is now approximately 2.3-3.7x (compared to 2-3.5x with libjpeg-turbo 2.0.x.) 32-bit (Armv7 or Armv7s) iOS builds of libjpeg-turbo are no longer supported, and the libjpeg-turbo build system can no longer be used to package such builds. 32-bit iOS apps cannot run in iOS 11 and later, and the App Store no longer allows them. 32-bit (i386) OS X/macOS builds of libjpeg-turbo are no longer supported, and the libjpeg-turbo build system can no longer be used to package such builds. 32-bit Mac applications cannot run in macOS 10.15 "Catalina" and later, and the App Store no longer allows them. The SSE2 (x86 SIMD) and C Huffman encoding algorithms have been significantly optimized, resulting in a measured average overall compression speedup of 12-28% for 64-bit code and 22-52% for 32-bit code on various Intel and AMD CPUs, as well as a measured average overall compression speedup of 0-23% on platforms that do not have a SIMD-accelerated Huffman encoding implementation. The block smoothing algorithm that is applied by default when decompressing progressive Huffman-encoded JPEG images has been improved in the following ways: The algorithm is now more fault-tolerant. Previously, if a particular scan was incomplete, then the smoothing parameters for the incomplete scan would be applied to the entire output image, including the parts of the image that were generated by the prior (complete) scan. Visually, this had the effect of removing block smoothing from lower-frequency scans if they were followed by an incomplete higher-frequency scan. libjpeg-turbo now applies block smoothing parameters to each iMCU row based on which scan generated the pixels in that row, rather than always using the block smoothing parameters for the most recent scan. When applying block smoothing to DC scans, a Gaussian-like kernel with a 5x5 window is used to reduce the "blocky" appearance. Added SIMD acceleration for progressive Huffman encoding on Arm platforms. This speeds up the compression of full-color progressive JPEGs by about 30-40% on average (relative to libjpeg-turbo 2.0.x) when using modern Arm CPUs. Added configure-time and run-time auto-detection of Loongson MMI SIMD instructions, so that the Loongson MMI SIMD extensions can be included in any MIPS64 libjpeg-turbo build. Added fault tolerance features to djpeg and jpegtran, mainly to demonstrate methods by which applications can guard against the exploits of the JPEG format described in the report "Two Issues with the JPEG Standard". Both programs now accept a -maxscans argument, which can be used to limit the number of allowable scans in the input file. Both programs now accept a -strict argument, which can be used to treat all warnings as fatal. CMake package config files are now included for both the libjpeg and TurboJPEG API libraries. This facilitates using libjpeg-turbo with CMake's find_package() function. For example: find_package(libjpeg-turbo CONFIG REQUIRED) add_executable(libjpeg_program libjpeg_program.c) target_link_libraries(libjpeg_program PUBLIC libjpeg-turbo::jpeg) add_executable(libjpeg_program_static libjpeg_program.c) target_link_libraries(libjpeg_program_static PUBLIC libjpeg-turbo::jpeg-static) add_executable(turbojpeg_program turbojpeg_program.c) target_link_libraries(turbojpeg_program PUBLIC libjpeg-turbo::turbojpeg) add_executable(turbojpeg_program_static turbojpeg_program.c) target_link_libraries(turbojpeg_program_static PUBLIC libjpeg-turbo::turbojpeg-static) Since the Unisys LZW patent has long expired, cjpeg and djpeg can now read/write both LZW-compressed and uncompressed GIF files (feature ported from jpeg-6a and jpeg-9d.) jpegtran now includes the -wipe and -drop options from jpeg-9a and jpeg-9d, as well as the ability to expand the image size using the -crop option. Refer to jpegtran.1 or usage.txt for more details. Added a complete intrinsics implementation of the Arm Neon SIMD extensions, thus providing SIMD acceleration on Arm platforms for all of the algorithms that are SIMD-accelerated on x86 platforms. This new implementation is significantly faster in some cases than the old GAS implementation-- depending on the algorithms used, the type of CPU core, and the compiler. GCC, as of this writing, does not provide a full or optimal set of Neon intrinsics, so for performance reasons, the default when building libjpeg-turbo with GCC is to continue using the GAS implementation of the following algorithms: 32-bit RGB-to-YCbCr color conversion 32-bit fast and accurate inverse DCT 64-bit RGB-to-YCbCr and YCbCr-to-RGB color conversion 64-bit accurate forward and inverse DCT 64-bit Huffman encoding A new CMake variable (NEON_INTRINSICS) can be used to override this default. Since the new intrinsics implementation includes SIMD acceleration for merged upsampling/color conversion, 1.5.1[5] is no longer necessary and has been reverted. The Arm Neon SIMD extensions can now be built using Visual Studio. The build system can now be used to generate a universal x86-64 + Armv8 libjpeg-turbo SDK package for both iOS and macOS. @ text @d3 3 a5 1 --- simd/arm/aarch64/jsimd.c.orig 2021-04-23 16:42:40.000000000 +0000 d7 2 a8 3 @@@@ -33,6 +33,10 @@@@ #define JSIMD_FASTST3 2 #define JSIMD_FASTTBL 4 d10 1 d14 4 a17 5 + static unsigned int simd_support = ~0; static unsigned int simd_huffman = 1; static unsigned int simd_features = JSIMD_FASTLD3 | JSIMD_FASTST3 | @@@@ -129,6 +133,9 @@@@ init_simd(void) d27 1 a27 1 @@@@ -143,6 +150,10 @@@@ init_simd(void) @