Commit Graph

814 Commits

Author SHA1 Message Date
Paul Dreik bbf52faf8c assert illegal null pointer arithmetic in tcd.c opj_tcd_dc_level_shift_decode 2022-08-25 13:08:42 +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 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
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
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 0544a0885b
ht_dec.c: fix likely issue on big endian hosts (untested) 2021-09-25 12:59:04 +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
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
Dimitri Papadopoulos bea58764ad
LGTM warning: Comparison result is always the same
Comparison is always true because pos >= 0.
2021-08-30 18:48:57 +03:00
Anonymous Maarten 5c2053950e cmake: add install interface include directory 2021-08-01 20:56:40 +02:00
Even Rouault 08ba6a1638
Fix code formatting 2021-07-12 15:59:41 +02:00
Sebastian Rasmussen e0993d072a opj_j2k_is_imf_compliant: Fix out of bounds access.
Previously when mainlevel was parsed == 12 openjpeg would generate
a warning, but then the sublevel value would be compared to an out
of bounds element in the tabMaxSubLevelFromMainLevel array. From
this commit OpenJPEG will only use mainlevel if in range.
2021-07-12 15:32:39 +02:00
Sebastian Rasmussen c8ab3e5849 opj_j2k_is_imf_compliant: Fix argument formatting for warnings. 2021-07-12 03:43:30 +02:00
Even Rouault a36ae03860
Add support for enabling generation of TLM markers in encoder
Support was already there, but restricted to Cinema and IMF profiles,
and 255 tiles

* Add -TLM switch added to opj_compress
* Make opj_encoder_set_extra_options() function accept a TLM=YES option.
2021-06-07 15:49:08 +02:00
Even Rouault 7e4e09a7fb
openjpeg.c: avoid casts of function pointers 2021-06-07 12:57:30 +02:00
Jamaika1 0c2b633992
Change defined WIN32 2020-12-21 07:59:12 +01:00
Even Rouault 8f5aff1dff
pi.c: avoid out of bounds access with POC (fixes #1302) 2020-12-04 20:45:25 +01:00
yuan 4ce7d285a5 Encoder: grow again buffer size in opj_tcd_code_block_enc_allocate_data() (fixes #1283) 2020-12-04 19:00:22 +08:00
Even Rouault aaff099b49
Merge pull request #1301 from rouault/fix_1299
opj_j2k_write_sod(): avoid potential heap buffer overflow (fixes #1299) (probably master only)
2020-12-02 23:56:57 +01:00
Even Rouault fb9eae5d63
Merge pull request #1300 from rouault/complement_1293
pi.c: avoid out of bounds access with POC (refs https://github.com/uclouvain/openjpeg/issues/1293#issuecomment-737122836)
2020-12-02 23:56:39 +01:00
Even Rouault 73fdf28342
opj_j2k_write_sod(): avoid potential heap buffer overflow (fixes #1299) (probably master only) 2020-12-02 14:10:16 +01:00
Even Rouault 00383e162a
pi.c: avoid out of bounds access with POC (refs https://github.com/uclouvain/openjpeg/issues/1293#issuecomment-737122836) 2020-12-02 14:03:11 +01:00
Even Rouault 38d661a389
opj_t2_encode_packet(): avoid out of bound access of #1297, but likely not the proper fix 2020-12-02 13:13:26 +01:00
Even Rouault 18b1138fbe
Merge pull request #1295 from rouault/fix_1293
opj_j2k_setup_encoder(): validate POC compno0 and compno1 (fixes #1293)
2020-12-02 10:05:39 +01:00
Even Rouault 630b485f86
Merge pull request #1296 from rouault/workaround_1294
opj_t2_encode_packet(): avoid out of bound access of #1294, but likely not the proper fix
2020-12-02 10:05:31 +01:00
Even Rouault c9380ed0f8
opj_j2k_setup_encoder(): validate POC compno0 (fixes #1293) 2020-12-01 19:56:44 +01:00
Even Rouault fbd30b064f
opj_t2_encode_packet(): avoid out of bound access of #1294, but likely not the proper fix 2020-12-01 19:51:35 +01:00
Even Rouault 6daf5f3e1e
Encoder: avoid global buffer overflow on irreversible conversion when too many decomposition levels are specified (fixes #1286) 2020-11-30 23:29:06 +01:00
Even Rouault 1aa3c60859
Decoding: deal with some SPOT6 images that have tiles with a single tile-part with TPsot == 0 and TNsot == 0, and with missing EOC 2020-11-30 17:53:04 +01:00
yuan 4f487798ba Free p_tcd_marker_info to avoid memory leak 2020-11-26 00:22:49 +08:00
yuan 649298dcf8 Encoder: grow again buffer size in opj_tcd_code_block_enc_allocate_data() (fixes #1283) 2020-11-25 20:41:39 +08:00
Even Rouault 15cf3d9581
Encoder: grow again buffer size in opj_tcd_code_block_enc_allocate_data() (fixes #1283) 2020-11-23 18:14:02 +01:00