summaryrefslogtreecommitdiff
path: root/src/lib/openjp2
AgeCommit message (Collapse)Author
2024-02-29Refactor build of both types of linkageKai Pastor
2024-02-29Fix export of OPJ_STATIC macroKai Pastor
2024-02-28Fix some typos (found by `codespell` and `typos`)Stefan Weil
Signed-off-by: Stefan Weil <sw@weilnetz.de>
2024-02-27opj_config.h.cmake.in: add inclusion guardEven Rouault
2024-02-27openjpeg.h: make sure to include opj_config.h (fixes #1514)Even Rouault
It was previously included by openjpeg.h
2024-02-18opj_t2_read_packet_header(): avoid unsigned integer overflow (alternate fix ↵Even Rouault
to https://github.com/uclouvain/openjpeg/pull/1488)
2024-02-18Merge pull request #1510 from rouault/fix_1505Even Rouault
opj_dwt_decode_tile(): avoid potential UndefinedBehaviorSanitizer 'applying zero offset to null pointer' (fixes #1505)
2024-02-18opj_dwt_decode_tile(): avoid potential UndefinedBehaviorSanitizer 'applying ↵Even Rouault
zero offset to null pointer' (fixes #1505)
2024-01-08CMake: drop support for cmake < 3.5Dominik Wójt
Compatibility for cmake version < 3.5 is now deprecated in cmake and specifing version below 3.5 in cmake_minimum_required produces a warning.[1] [1] https://cmake.org/cmake/help/latest/release/3.27.html#deprecated-and-removed-features
2024-01-05Fix compiler error on Windowsscaramallion
2023-12-09ht_dec.c: Improve MSVC arm64 popcount performance (#1479)Peter Johnson
Use NEON instructions for ARM64 (implementation based on microsoft/STL#2127). Godbolt output here: https://godbolt.org/z/q7GPTqT14
2023-12-08Merge pull request #1496 from rouault/fix_1480Even Rouault
opj_tcd_dc_level_shift_decode(): avoid increment nullptr (fixes #1480)
2023-12-08Merge pull request #1490 from headshog/fix-j2kEven Rouault
Integer Overflow at j2k.c:3962
2023-12-08Merge pull request #1491 from headshog/fix-j2k-headerEven Rouault
Integer Overflow at j2k.c:11114
2023-12-08Merge pull request #1492 from headshog/fix-ht-decEven Rouault
fix ht_dec.c:1215
2023-12-08opj_tcd_dc_level_shift_decode(): avoid increment nullptr (fixes #1480)Even Rouault
(likely harmless issue as we don't dereference it)
2023-12-08Merge pull request #1484 from mayeut/mandatory-inttypes-stdintEven Rouault
Require `stdint.h` & `inttypes.h`
2023-12-08opj_t1_ht_decode_cblk(): avoid memcpy() with 0-input size and nullptr ↵headshog
destination. fix ht_dec.c:1215 (#1492)
2023-12-08fix j2k.c:11114headshog
2023-12-08opj_j2k_merge_ppm(): avoid unsigned-integer-overflow at j2k.c:3962 (#1490)headshog
2023-12-08suppress warning during build using clangTomoaki Teshima
2023-09-24Require `stdint.h` & `inttypes.h`mayeut
With #1450 which goes with 480cc9d49775d018c19ce0e01f6be27858d63d39 "Remove support for non-C99 compilers (like VS2010) that don't support snprintf()", support for MSVC versions prior to vs2015 is dropped: https://stackoverflow.com/questions/2915672/snprintf-and-visual-studio-2010 This means that all supported MSVC versions do have `stdint.h` & `inttypes.h` now. For non windows platforms, those headers were already mandatory. Make them mandatory for all builds.
2023-09-23fix: use `opj_uint_ceildiv` instead of `opj_int_ceildiv` when necessarymayeut
There are a bunch of loc where we can see a usage of `opj_int_ceildiv`: ``` (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)a, (OPJ_INT32)b); ``` where a & b are `OPJ_UINT32`. This can lead to overflow/underflow for some a/b combinations. Replace those calls by `opj_uint_ceildiv` instead to always get a correct result. This also allows some valid single tile images with huge tile size to be decoded properly. Fix #1438
2023-03-26Merge pull request #1463 from rouault/fix_570Even Rouault
opj_jp2_read_header(): move setting color_space here instead in opj_jp2_decode()/get_tile() (fixes #570)
2023-03-26opj_jp2_read_header(): move setting icc_profile here instead in ↵Even Rouault
opj_jp2_decode()/get_tile() + add unit test (fixes #570)
2023-03-17opj_jp2_read_header(): move setting color_space here instead in ↵Even Rouault
opj_jp2_decode()/get_tile() (fixes #570)
2023-03-09Merge pull request #1462 from sebras/masterEven Rouault
CMake: error out on warnings for strict/missing prototypes.
2023-03-09CMake: error out on warnings for strict/missing prototypes.Sebastian Rasmussen
And fix strict-prototypes/missing-prototypes warnings.
2023-03-07openjp2/j2k: replace sprintf calls with snprintfMark Mentovai
This makes it possible to build j2k.c without warnings using the macOS 13 SDK. Calls to sprintf are replaced with snprintf, passing appropriate buffer sizes. It doesn’t appear that any of the changed uses of sprintf were actually unsafe, so no behavior change is expected aside from SDK compatibility. The macOS 13 SDK deprecates sprintf as it’s difficult to use safely. The deprecation warning message is visible when building C++, but it is not normally visible when building plain C code due to a quirk in how sprintf is declared in the SDK. However, the deprecation message is visible when building plain C under Address Sanitizer (-fsanitize=address). This discrepancy was discovered at https://crbug.com/1381706 and reported to Apple with a copy at https://openradar.appspot.com/FB11761475. The macOS 13 SDK is packaged in Xcode 14.1, released on 2022-11-01. This also affects the iOS 16 SDK and other 2022-era Apple OS SDKs packaged in Xcode 14.0, released on 2022-09-12. j2k.c is visible to the Chromium build via PDFium, and this change is needed to allow Chromium to move forward to the macOS 13 SDK. This change is limited to src/lib/openjp2. Other uses of sprintf were found throughout openjpeg.
2023-03-07opj_t2_skip_packet_data(): avoid out-of-bounds reads on truncated images in ↵Even Rouault
non-strict mode (fixes #1459)
2023-02-07CMake: add missing GNUInstallDirs related substitutions (fixes #1424) (#1456)autoantwort
2022-10-18Fix incorrect decoding of image with large number of progression levelsEven Rouault
Fixes regression introduced per d27ccf01c68a31ad62b33d2dc1ba2bb1eeaafe7b Fixes #1447
2022-08-12Fix Heap-buffer-overflow READ in opj_jp2_apply_pclr (#1441)Aleks L
The issue was found while fuzzing opencv: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=47342 The read overflow triggered by reading `src[j]` in ```cpp for (j = 0; j < max; ++j) { dst[j] = src[j]; } ``` The max is calculated as `new_comps[pcol].w * new_comps[pcol].h`, however the `src = old_comps[cmp].data;` which may have different `w` and `h` dimensions.
2022-08-12Merge pull request #1440 from rouault/rate_alloc_speedupEven Rouault
Significant speed-up rate allocation by rate/distoratio ratio
2022-08-11Replace the assert in mel_init to an if statement to address an issue with ↵Aous Naman
fuzzing. (#1436) Modified the mel_init code to replace the assert statement with an if statement, returning false when an incorrect sequence of bytes are encountered in the MEL segment. Similar code should be added to the main MEL decoding subrountine, but the change is more involved; in any case, an incorrect sequence produces incorrect results, but should not be harmful or cause a crash.
2022-08-11Cleanup code related to quality layer allocation, and add a few safety checksEven Rouault
2022-08-11Significant speed-up rate allocation by rate/distoratio ratioEven Rouault
- Avoid doing 128 iterations all the time, and stop when the threshold doesn't vary much - Avoid calling costly opj_t2_encode_packets() repeatdly when bisecting the layer ratio if the truncation points haven't changed since the last iteration. When used with the GDAL gdal_translate application to convert a 11977 x 8745 raster with data type UInt16 and 8 channels, the conversion time to JPEG2000 with 20 quality layers using disto/rate allocation ( -co "IC=C8" -co "JPEG2000_DRIVER=JP2OPENJPEG" -co "PROFILE=NPJE_NUMERICALLY_LOSSLESS" creation options of the GDAL NITF driver) goes from 5m56 wall clock (8m20s total, 12 vCPUs) down to 1m16 wall clock (3m45 total).
2022-08-11Micro-optimization: use directly opj_bio_putbit() instead of opj_bio_write() ↵Even Rouault
to emit single bit
2022-08-07CMake: switch to GNUInstallDirs (#1424)Thomas Bracht Laumann Jespersen
* Add GNUInstallDirs for standard installation directories Distributions are given standard variables for already existing hooks. Multiarch libdirs is taken care of automagically. Raises minimum cmake version by a little. * Handle CMAKE_INSTALL_xxx being absolute paths for .pc file generation In some cases the CMAKE_INSTAL_{BIN,MAN,DOC,LIB,INCLUDE}DIR variables may turn out to be absolute paths in which case prepending ${prefix} in the pkg-config .pc files will result in incorrect values. For .pc file generation, figure out if these variables are absolute and omit the prefix in the configured file when so. See: https://github.com/OSGeo/PROJ/commit/ab25e4b7ed9544e668282dcd293cfaaa2e56dbdf
2022-06-29opj_t1_encode_cblk(): avoid undefined behaviour on fuzzed input (fixes #1432)Even Rouault
2022-05-31HT_DEC: Fix opj_t1_allocate_buffers malloc size error (#1426) (fixes #1413)Yuan
2022-05-16Merge pull request #1423 from Neumann-A/patch-1Even Rouault
Fix windows arm builds
2022-05-16Fix windows arm buildsAlexander Neumann
2022-05-15pkgconfig: Define OPJ_STATIC for static linking with pkgconfBiswapriyo Nath
allows for the usage of $(pkgconf --static --cflags libopenjp2) to produce the proper CFLAGS for static linking. Relies on pkgconf rather than pkg-config
2022-02-10opj_j2k_decode_tile(): avoid 'Stream too short' error in non-strict modeEven Rouault
2022-02-10Avoid integer overflows in DWT. Fixes ↵Even Rouault
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=44544
2022-02-10Add support for partial bitstream decoding (#1407) (fixes #715)Robert Gabriel Jakabosky
Add a -allow-partial option to opj_decompress utility and a opj_decoder_set_strict_mode() option to the API Co-authored-by: Chris Hafey <chafey@gmail.com>
2022-01-23opj_encoder_set_extra_options(): add a GUARD_BITS=value optionEven Rouault
and add a -GuardBits option to opj_compress. The recently-released SMPTE DCP Bv2.1 Application Profile (link below) says that the number of guard bits in the QCD marker shall be 1 for 2K content and 2 for 4K content. This change allows the number of guard bits to be configured, so that users of openjpeg have the control they need to meet the specification. https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9161348 This is an alternative implementation of https://github.com/uclouvain/openjpeg/pull/1388 that keeps ABI unchanged.
2022-01-18Fix potential overflow related issues spotted by LGTM code analysis (#1402)Eric Harvey
2022-01-18opj_j2k_setup_encoder(): validate number of tiles to avoid illegal values ↵Even Rouault
and potential overflow (fixes #1399)