1150 Commits

Author SHA1 Message Date
Even Rouault
2c8c5025ce
Merge pull request #1484 from mayeut/mandatory-inttypes-stdint
Require `stdint.h` & `inttypes.h`
2023-12-08 15:55:00 +01:00
Tomoaki Teshima
597389a45f suppress warning during build using clang 2023-12-08 20:56:37 +09:00
mayeut
c4b3a91ede
Require stdint.h & inttypes.h
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-24 13:54:28 +02:00
mayeut
d23e0284c9
fix: use opj_uint_ceildiv instead of opj_int_ceildiv when necessary
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-09-23 12:50:57 +02:00
Even Rouault
1ee6d115e8
Merge pull request #1463 from rouault/fix_570
opj_jp2_read_header(): move setting color_space here instead in opj_jp2_decode()/get_tile() (fixes #570)
2023-03-26 16:08:24 +02:00
Even Rouault
59ec1f0ae6
opj_jp2_read_header(): move setting icc_profile here instead in opj_jp2_decode()/get_tile() + add unit test (fixes #570) 2023-03-26 14:03:59 +02:00
Even Rouault
0f528e9578
opj_jp2_read_header(): move setting color_space here instead in opj_jp2_decode()/get_tile() (fixes #570) 2023-03-17 18:16:35 +01:00
Even Rouault
15c0dca520
Merge pull request #1462 from sebras/master
CMake: error out on warnings for strict/missing prototypes.
2023-03-09 21:15:39 +01:00
Sebastian Rasmussen
eb8a7e4427 CMake: error out on warnings for strict/missing prototypes.
And fix strict-prototypes/missing-prototypes warnings.
2023-03-09 20:09:27 +01:00
Mark Mentovai
032b6e93cb
openjp2/j2k: replace sprintf calls with snprintf
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-07 16:47:10 +01:00
Even Rouault
c33e3d4af3
opj_t2_skip_packet_data(): avoid out-of-bounds reads on truncated images in non-strict mode (fixes #1459) 2023-03-07 13:08:24 +01:00
autoantwort
ee58d77047
CMake: add missing GNUInstallDirs related substitutions (fixes #1424) (#1456) 2023-02-07 01:08:38 +01:00
Even Rouault
6ab3ca69fd
Fix incorrect decoding of image with large number of progression levels
Fixes regression introduced per d27ccf01c68a31ad62b33d2dc1ba2bb1eeaafe7b

Fixes #1447
2022-10-18 23:03:05 +02:00
Aleks L
be95561917
Fix Heap-buffer-overflow READ in opj_jp2_apply_pclr (#1441)
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-12 15:48:41 +02:00
Even Rouault
49fea5c45e
Merge pull request #1440 from rouault/rate_alloc_speedup
Significant speed-up rate allocation by rate/distoratio ratio
2022-08-12 11:55:38 +02:00
Aous Naman
4da04cd3e8
Replace the assert in mel_init to an if statement to address an issue with 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-11 18:29:40 +02:00
Even Rouault
c06632c6f6
Cleanup code related to quality layer allocation, and add a few safety checks 2022-08-11 18:12:07 +02:00
Even Rouault
3d9bcd3753
Significant speed-up rate allocation by rate/distoratio ratio
- 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-11 18:06:50 +02:00
Even Rouault
e9fc08a52a
Micro-optimization: use directly opj_bio_putbit() instead of opj_bio_write() to emit single bit 2022-08-11 16:41:57 +02:00
Thomas Bracht Laumann Jespersen
c7bccf0515
CMake: switch to GNUInstallDirs (#1424)
* 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: ab25e4b7ed
2022-08-07 16:42:01 +02:00
Even Rouault
dd1a2d6480
opj_t1_encode_cblk(): avoid undefined behaviour on fuzzed input (fixes #1432) 2022-06-29 11:47:58 +02:00
Yuan
0535bfc3b7
HT_DEC: Fix opj_t1_allocate_buffers malloc size error (#1426) (fixes #1413) 2022-05-31 11:55:12 +02:00
Even Rouault
5292728740
Merge pull request #1423 from Neumann-A/patch-1
Fix windows arm builds
2022-05-16 23:35:22 +02:00
Alexander Neumann
098bb874db
Fix windows arm builds 2022-05-16 23:10:26 +02:00
Biswapriyo Nath
17d1bc7f1a pkgconfig: Define OPJ_STATIC for static linking with pkgconf
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-05-15 18:11:50 +05:30
Even Rouault
76c6a25726
opj_compress.c: usage formatting fix 2022-05-08 19:45:53 +02:00
Pei Jia
3ac495c7fc JAVA_SOURCE_VERSION from 1.6 to 1.8 2022-05-06 18:27:27 -07:00
Even Rouault
6a29f5a9e3
opj_j2k_decode_tile(): avoid 'Stream too short' error in non-strict mode 2022-02-10 15:50:07 +01:00
Even Rouault
1462e9403f
Avoid integer overflows in DWT. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=44544 2022-02-10 14:30:13 +01:00
Robert Gabriel Jakabosky
883c31dbe0
Add support for partial bitstream decoding (#1407) (fixes #715)
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-02-10 14:27:17 +01:00
Even Rouault
1de5fc6c51
opj_encoder_set_extra_options(): add a GUARD_BITS=value option
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-23 17:54:44 +01:00
Eric Harvey
241e9e8efe
Fix potential overflow related issues spotted by LGTM code analysis (#1402) 2022-01-18 21:55:10 +01:00
Even Rouault
70f5e0a0df
opj_j2k_setup_encoder(): validate number of tiles to avoid illegal values and potential overflow (fixes #1399) 2022-01-18 15:44:18 +01:00
Eric Harvey
a1eec9c49e
Fix unsigned vs OPJ_INT32 mismatches (#1398) 2022-01-16 18:54:00 +01:00
Eharve14
6e4588f379
Added check for integer overflow in get_num_images (#1397)
As discussed in pull request 1396, added a check for integer overflow.
Change list:
Defined num_images as unsigned int
Moved the if statement to check for an empty directory to the beginning of the read directory section
Added a check to see if num images would roll back to zero when incrementing.
2022-01-15 15:33:03 +01:00
Eharve14
1daaa0b909
Avoid overflow in multiplications in utilities related to big number of files in a directory (CVE-2021-29338) (#1396) 2022-01-13 21:05:52 +01:00
Brad Parham
79c7d7af59
opj_compress/opj_uncompress: fix integer overflow in num_images (#1395)
Includes the fix for CVE-2021-29338
Credit to @kaniini based on #1346
Fixes #1338
2022-01-12 13:46:10 +01:00
Stefan Weil
af8339d33f Remove duplicate assignments in function tiftoimage
Signed-off-by: Stefan Weil <sw@weilnetz.de>
2021-12-10 11:29:06 +01:00
Stefan Weil
6ec9871eca Format source file with typo fixes
Signed-off-by: Stefan Weil <sw@weilnetz.de>
2021-12-05 13:38:47 +01:00
Stefan Weil
ef73ad1c97 Fix singular/plural mismatch
Signed-off-by: Stefan Weil <sw@weilnetz.de>
2021-12-05 13:32:09 +01:00
Stefan Weil
667149ffa1 Fix some typos (found by codespell)
Signed-off-by: Stefan Weil <sw@weilnetz.de>
2021-12-05 13:14:33 +01:00
msheby
90481203a2
opj_compress: add a -TargetBitDepth switch for TIFF output (#1384)
Sometimes, given the same (16-bit TIF) input, one wants to generate a variety of J2C outputs (say, 16-, 12-, and 10-bit). This patch allows one to downsample input files, and so makes it easier to automate OpenJPEG in mass generation of J2Cs without having to pipe though an image processing program.
2021-10-27 14:10:50 +02:00
Even Rouault
0b5d62684f
API: deprecate 'bpp' member in favor of 'prec'
in opj_image_comp and opj_image_comptparm structures.

bpp was redundant with prec, and almost never set by the library, except
by opj_image_create(). This change should hopefully not impact existing,
working, users of the API, which should already have used prec to get
things working.

Fixes #1379
2021-10-21 14:13:58 +02:00
Even Rouault
15594a3dbf
opj_dump.c: fix potential buffer overflow 2021-09-26 12:37:59 +02:00
Even Rouault
0544a0885b
ht_dec.c: fix likely issue on big endian hosts (untested) 2021-09-25 12:59:04 +02:00
Even Rouault
f3d8c763ba
opj_decompress / opj_dump: accept .jph and .jhc extensions for HTJ2K files 2021-09-25 12:26:59 +02:00
Aous Naman
1e6c925eb5
Added support for high throughput (HTJ2K) decoding.
There are a few limitations:
- mixed mode (HT and regular code blocks) is not supported.
- ROI in HT blocks is not supported.
- Placeholder passes are not supported.
- MultiHT sets are not support, only a singleHT set.
- there are known issues with some compliance testing files related to
  the parsing of packet header.
2021-09-25 12:26:59 +02:00
Jamaika1
8fc4bf8ecb
Use standard integer types for compatibility with libtiff 4.3.0 (#1377) 2021-09-12 12:32:38 +02:00
Even Rouault
badbd93af9
Avoid integer overflows in DWT. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11700 and https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=30646 2021-09-03 15:17:56 +02:00
Even Rouault
172583ab5b
Merge pull request #1373 from DimitriPapadopoulos/lgtm
LGTM warning: Comparison result is always the same
2021-08-30 19:15:32 +02:00