openjpeg.git
6 years agoPreparing Release v2.2.0 v2.2.0
Antonin Descampe [Thu, 10 Aug 2017 00:31:50 +0000 (17:31 -0700)]
Preparing Release v2.2.0

6 years agoPreparing Release v2.2.0
Antonin Descampe [Thu, 10 Aug 2017 00:28:17 +0000 (17:28 -0700)]
Preparing Release v2.2.0

6 years ago.travis.yml: add 'dist: precise' for config that requires it
Even Rouault [Wed, 9 Aug 2017 23:14:35 +0000 (01:14 +0200)]
.travis.yml: add 'dist: precise' for config that requires it

6 years agoRemove useless opj_tcd_t::enumcs field added per #975
Even Rouault [Wed, 9 Aug 2017 15:37:05 +0000 (17:37 +0200)]
Remove useless opj_tcd_t::enumcs field added per #975

6 years agoDoc: fix error in previous commit
Even Rouault [Wed, 9 Aug 2017 13:04:29 +0000 (15:04 +0200)]
Doc: fix error in previous commit

6 years agotcd.h: doc fixes and improvements
Even Rouault [Wed, 9 Aug 2017 12:50:59 +0000 (14:50 +0200)]
tcd.h: doc fixes and improvements

6 years agoDocument qmfbid values
Even Rouault [Wed, 9 Aug 2017 12:13:58 +0000 (14:13 +0200)]
Document qmfbid values

6 years agoPartial revert BPC related check of #975 (#979)
Even Rouault [Wed, 9 Aug 2017 09:34:08 +0000 (11:34 +0200)]
Partial revert BPC related check of #975 (#979)

PR #975 introduced a check that rejects images that have different bit depth/sign
per compoment in SIZ marker if the JP2 IHDR box has BPC != 255
This didn't work properly if decoding a .j2k file since the new bit added in
opj_cp_t wasn't initialized to the right value.
For clarity, tThis new bit has also been renamed to allow_different_bit_depth_sign

But looking closer at the code, it seems we were already tolerant to inconsistencies.
For example we parsed a JP2 BPCC box even if BPC != 255 (just a warning is emitted)
So failing hard in opj_j2k_read_siz() wouldn't be very inconsistent, and that
alone cannot protect against other issues, so just emit a warning if BPC != 255
and the SIZ marker contains different bit depth/sign per component.

Note: we could also check that the content of JP2 BPCC box is consistant with the one
of the SIZ marker.

6 years agoopj_decompress: document -quiet option, and remove spurious newline output
Even Rouault [Wed, 9 Aug 2017 08:03:59 +0000 (10:03 +0200)]
opj_decompress: document -quiet option, and remove spurious newline output

6 years agosrc/bin/jpwl/convert.c pgxtoimage(): add missing fclose() (#977)
Even Rouault [Wed, 9 Aug 2017 07:50:39 +0000 (09:50 +0200)]
src/bin/jpwl/convert.c pgxtoimage(): add missing fclose() (#977)

6 years agoimagetobmp: avoid shift by -1 (relates to #811)
Even Rouault [Wed, 9 Aug 2017 07:42:30 +0000 (09:42 +0200)]
imagetobmp: avoid shift by -1 (relates to #811)

6 years agoFix remaining warning
Antonin Descampe [Wed, 9 Aug 2017 01:05:37 +0000 (18:05 -0700)]
Fix remaining warning

format specifier mismatch in #975

6 years agoMerge pull request #975 from szukw000/changes-for-afl-tests
Antonin Descampe [Tue, 8 Aug 2017 23:51:54 +0000 (16:51 -0700)]
Merge pull request #975 from szukw000/changes-for-afl-tests

Catch images broken by AFL

6 years agoMerge pull request #968 from rouault/reduce_memory_decoding
Even Rouault [Mon, 7 Aug 2017 18:17:36 +0000 (20:17 +0200)]
Merge pull request #968 from rouault/reduce_memory_decoding

Reduce memory decoding

6 years agoSlight improvement in management of code block chunks 968/head
Even Rouault [Thu, 6 Jul 2017 17:34:21 +0000 (19:34 +0200)]
Slight improvement in management of code block chunks

Instead of having the chunk array at the segment level, we can move it down to
the codeblock itself since segments are filled in sequential order.
Limit the number of memory allocation, and decrease slightly the memory usage.

On MAPA_005.jp2

n4: 1871312549 (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
 n1: 1610689344 0x4E781E7: opj_aligned_malloc (opj_malloc.c:61)
  n1: 1610689344 0x4E71D1B: opj_alloc_tile_component_data (tcd.c:676)
   n1: 1610689344 0x4E726CF: opj_tcd_init_decode_tile (tcd.c:816)
    n1: 1610689344 0x4E4BE39: opj_j2k_read_tile_header (j2k.c:8617)
     n1: 1610689344 0x4E4C902: opj_j2k_decode_tiles (j2k.c:10348)
      n1: 1610689344 0x4E4E3CE: opj_j2k_decode (j2k.c:7846)
       n1: 1610689344 0x4E53002: opj_jp2_decode (jp2.c:1564)
        n0: 1610689344 0x40374E: main (opj_decompress.c:1459)
 n1: 219232541 0x4E4BC50: opj_j2k_read_tile_header (j2k.c:4683)
  n1: 219232541 0x4E4C902: opj_j2k_decode_tiles (j2k.c:10348)
   n1: 219232541 0x4E4E3CE: opj_j2k_decode (j2k.c:7846)
    n1: 219232541 0x4E53002: opj_jp2_decode (jp2.c:1564)
     n0: 219232541 0x40374E: main (opj_decompress.c:1459)
 n1: 23893200 0x4E72735: opj_tcd_init_decode_tile (tcd.c:1225)
  n1: 23893200 0x4E4BE39: opj_j2k_read_tile_header (j2k.c:8617)
   n1: 23893200 0x4E4C902: opj_j2k_decode_tiles (j2k.c:10348)
    n1: 23893200 0x4E4E3CE: opj_j2k_decode (j2k.c:7846)
     n1: 23893200 0x4E53002: opj_jp2_decode (jp2.c:1564)
      n0: 23893200 0x40374E: main (opj_decompress.c:1459)
 n0: 17497464 in 52 places, all below massif's threshold (1.00%)

6 years agoDecoding: do not allocate memory for the codestream of each codeblock
Even Rouault [Thu, 6 Jul 2017 14:11:11 +0000 (16:11 +0200)]
Decoding: do not allocate memory for the codestream of each codeblock

Currently we allocate at least 8192 bytes for each codeblock, and copy
the relevant parts of the codestream in that per-codeblock buffer as we
decode packets.
As the whole codestream for the tile is ingested in memory and alive
during the decoding, we can directly point to it instead of copying. But
to do that, we need an intermediate concept, a 'chunk' of code-stream segment,
given that segments may be made of data at different places in the code-stream
when quality layers are used.

With that change, the decoding of MAPA_005.jp2 goes down from the previous
improvement of 2.7 GB down to 1.9 GB.

New profile:

n4: 1885648469 (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
 n1: 1610689344 0x4E78287: opj_aligned_malloc (opj_malloc.c:61)
  n1: 1610689344 0x4E71D7B: opj_alloc_tile_component_data (tcd.c:676)
   n1: 1610689344 0x4E7272C: opj_tcd_init_decode_tile (tcd.c:816)
    n1: 1610689344 0x4E4BDD9: opj_j2k_read_tile_header (j2k.c:8618)
     n1: 1610689344 0x4E4C8A2: opj_j2k_decode_tiles (j2k.c:10349)
      n1: 1610689344 0x4E4E36E: opj_j2k_decode (j2k.c:7847)
       n1: 1610689344 0x4E52FA2: opj_jp2_decode (jp2.c:1564)
        n0: 1610689344 0x40374E: main (opj_decompress.c:1459)
 n1: 219232541 0x4E4BBF0: opj_j2k_read_tile_header (j2k.c:4685)
  n1: 219232541 0x4E4C8A2: opj_j2k_decode_tiles (j2k.c:10349)
   n1: 219232541 0x4E4E36E: opj_j2k_decode (j2k.c:7847)
    n1: 219232541 0x4E52FA2: opj_jp2_decode (jp2.c:1564)
     n0: 219232541 0x40374E: main (opj_decompress.c:1459)
 n1: 39822000 0x4E727A9: opj_tcd_init_decode_tile (tcd.c:1219)
  n1: 39822000 0x4E4BDD9: opj_j2k_read_tile_header (j2k.c:8618)
   n1: 39822000 0x4E4C8A2: opj_j2k_decode_tiles (j2k.c:10349)
    n1: 39822000 0x4E4E36E: opj_j2k_decode (j2k.c:7847)
     n1: 39822000 0x4E52FA2: opj_jp2_decode (jp2.c:1564)
      n0: 39822000 0x40374E: main (opj_decompress.c:1459)
 n0: 15904584 in 52 places, all below massif's threshold (1.00%)

6 years agoAdd documentation for magic values in the code
Even Rouault [Thu, 6 Jul 2017 11:23:29 +0000 (13:23 +0200)]
Add documentation for magic values in the code

6 years agoopj_jp2_apply_pclr() also needs to use opj_image_data_alloc/opj_image_data_free
Even Rouault [Thu, 6 Jul 2017 00:17:26 +0000 (02:17 +0200)]
opj_jp2_apply_pclr() also needs to use opj_image_data_alloc/opj_image_data_free

6 years agoComplementary fix to previous commit
Even Rouault [Thu, 6 Jul 2017 00:02:25 +0000 (02:02 +0200)]
Complementary fix to previous commit

6 years agoAdd opj_image_data_alloc() / opj_image_data_free()
Even Rouault [Wed, 5 Jul 2017 23:47:40 +0000 (01:47 +0200)]
Add opj_image_data_alloc() / opj_image_data_free()

As bin/common/color.c used to directly call malloc()/free(), we need
to export functions dedicated to allocating/freeing image component data.

6 years agoFix crash on Windows due to b7594c0fcb9dd3aa6356d72c4a525d76168da689
Even Rouault [Wed, 5 Jul 2017 23:05:24 +0000 (01:05 +0200)]
Fix crash on Windows due to b7594c0fcb9dd3aa6356d72c4a525d76168da689

b7594c0fcb9dd3aa6356d72c4a525d76168da689 may put opj_tcd_tilecomp_t->data
allocated by opj_alloc_tile_component_data() as the image->comps[].data. As
opj_alloc_tile_component_data() use opj_aligned_malloc() we must be sure to
ue opj_alined_malloc()/_free() in all places where we alloc/free
image->comps[].data.

Note: this might have some compatibility impact in case user code does itself
the allocation/free of image->comps[].data

6 years agoDecrease memory consumption for whole image single tile decoding.
Even Rouault [Wed, 5 Jul 2017 21:48:28 +0000 (23:48 +0200)]
Decrease memory consumption for whole image single tile decoding.

We can use the same buffer for the tile decoding and the final image, and
save the intermediate buffer to transfer between those.

Effect on the decoding of MAPA (9944 x 13498 x 3 components of size byte)

Peak memory from 4.5 GB to 2.7 GB

Now:
n5: 2699708767 (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
 n1: 1610689344 0x4E77E07: opj_aligned_malloc (opj_malloc.c:61) <-- final image
  n1: 1610689344 0x4E7195B: opj_alloc_tile_component_data (tcd.c:676)
   n1: 1610689344 0x4E722D2: opj_tcd_init_decode_tile (tcd.c:816)
    n1: 1610689344 0x4E4BCF1: opj_j2k_read_tile_header (j2k.c:8597)
     n1: 1610689344 0x4E4C742: opj_j2k_decode_tiles (j2k.c:10324)
      n1: 1610689344 0x4E4E20E: opj_j2k_decode (j2k.c:7826)
       n1: 1610689344 0x4E52E42: opj_jp2_decode (jp2.c:1564)
        n0: 1610689344 0x40369E: main (opj_decompress.c:1459)
 n1: 815554560 0x4E72231: opj_tcd_init_decode_tile (tcd.c:1217) <-- working memory for code blocks: 9944*13498/64/64*8192*3
  n1: 815554560 0x4E4BCF1: opj_j2k_read_tile_header (j2k.c:8597)
   n1: 815554560 0x4E4C742: opj_j2k_decode_tiles (j2k.c:10324)
    n1: 815554560 0x4E4E20E: opj_j2k_decode (j2k.c:7826)
     n1: 815554560 0x4E52E42: opj_jp2_decode (jp2.c:1564)
      n0: 815554560 0x40369E: main (opj_decompress.c:1459)
 n1: 219758391 0x4E4C0BF: opj_j2k_read_tile_header (j2k.c:4661) <-- ingestion of code stream
  n1: 219758391 0x4E4C742: opj_j2k_decode_tiles (j2k.c:10324)
   n1: 219758391 0x4E4E20E: opj_j2k_decode (j2k.c:7826)
    n1: 219758391 0x4E52E42: opj_jp2_decode (jp2.c:1564)
     n0: 219758391 0x40369E: main (opj_decompress.c:1459)
 n1: 39822000 0x4E7224F: opj_tcd_init_decode_tile (tcd.c:1224) <-- OPJ_J2K_DEFAULT_NB_SEGS*sizeof(opj_tcd_seg_t) per codeblock
  n1: 39822000 0x4E4BCF1: opj_j2k_read_tile_header (j2k.c:8597)
   n1: 39822000 0x4E4C742: opj_j2k_decode_tiles (j2k.c:10324)
    n1: 39822000 0x4E4E20E: opj_j2k_decode (j2k.c:7826)
     n1: 39822000 0x4E52E42: opj_jp2_decode (jp2.c:1564)
      n0: 39822000 0x40369E: main (opj_decompress.c:1459)
 n0: 13884472 in 49 places, all below massif's threshold (1.00%)

Before:
n5: 4493329848 (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
 n2: 1610709160 0x4E77C87: opj_aligned_malloc (opj_malloc.c:61)
  n1: 1610689344 0x4E717DB: opj_alloc_tile_component_data (tcd.c:676)
   n1: 1610689344 0x4E72152: opj_tcd_init_decode_tile (tcd.c:816)
    n1: 1610689344 0x4E4BCF1: opj_j2k_read_tile_header (j2k.c:8597)
     n1: 1610689344 0x4E4C64A: opj_j2k_decode_tiles (j2k.c:10318)
      n1: 1610689344 0x4E4E08E: opj_j2k_decode (j2k.c:7826)
       n1: 1610689344 0x4E52CC2: opj_jp2_decode (jp2.c:1564)
        n0: 1610689344 0x40369E: main (opj_decompress.c:1459)
  n0: 19816 in 2 places, all below massif's threshold (1.00%)
 n1: 1610689344 0x4E43F36: opj_j2k_update_image_data.isra.7 (j2k.c:8743)
  n1: 1610689344 0x4E4C5C1: opj_j2k_decode_tiles (j2k.c:10358)
   n1: 1610689344 0x4E4E08E: opj_j2k_decode (j2k.c:7826)
    n1: 1610689344 0x4E52CC2: opj_jp2_decode (jp2.c:1564)
     n0: 1610689344 0x40369E: main (opj_decompress.c:1459)
 n1: 815554560 0x4E720B1: opj_tcd_init_decode_tile (tcd.c:1217)
  n1: 815554560 0x4E4BCF1: opj_j2k_read_tile_header (j2k.c:8597)
   n1: 815554560 0x4E4C64A: opj_j2k_decode_tiles (j2k.c:10318)
    n1: 815554560 0x4E4E08E: opj_j2k_decode (j2k.c:7826)
     n1: 815554560 0x4E52CC2: opj_jp2_decode (jp2.c:1564)
      n0: 815554560 0x40369E: main (opj_decompress.c:1459)
 n1: 402672336 0x4E4C545: opj_j2k_decode_tiles (j2k.c:10336)
  n1: 402672336 0x4E4E08E: opj_j2k_decode (j2k.c:7826)
   n1: 402672336 0x4E52CC2: opj_jp2_decode (jp2.c:1564)
    n0: 402672336 0x40369E: main (opj_decompress.c:1459)
 n0: 53704448 in 58 places, all below massif's threshold (1.00%)

6 years agoChanges for converttif.c to fix tsize_t 975/head
szukw000 [Mon, 7 Aug 2017 14:44:28 +0000 (16:44 +0200)]
Changes for converttif.c to fix tsize_t

6 years agoopj_j2k_read_sot(): check current TPSot number regarding previous (non-zero) TNsot...
Even Rouault [Fri, 4 Aug 2017 16:01:29 +0000 (18:01 +0200)]
opj_j2k_read_sot(): check current TPSot number regarding previous (non-zero) TNsot to avoid opj_j2k_merge_ppt() to be called several times. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2851. Credit to OSS Fuzz

6 years agoFirst change on changes-for-afl-tests
szukw000 [Wed, 2 Aug 2017 15:27:08 +0000 (17:27 +0200)]
First change on changes-for-afl-tests

6 years agoUpdate abi-check to take into account new defaults for "add" git command
Antonin Descampe [Wed, 2 Aug 2017 15:07:29 +0000 (17:07 +0200)]
Update abi-check to take into account new defaults for "add" git command

6 years agoWIP: fix abi-check and automatic upload
Antonin Descampe [Wed, 2 Aug 2017 14:50:11 +0000 (16:50 +0200)]
WIP: fix abi-check and automatic upload

6 years agosrc/bin/jpwl/convert.c: add missing fclose() in error code path (suggested by maddin2...
Even Rouault [Mon, 31 Jul 2017 15:35:10 +0000 (17:35 +0200)]
src/bin/jpwl/convert.c: add missing fclose() in error code path (suggested by maddin200, #976)

6 years agoCatch images broken by AFL
szukw000 [Mon, 31 Jul 2017 11:58:08 +0000 (13:58 +0200)]
Catch images broken by AFL

6 years agosrc/lib/openjp2/*.h: use OPJ_ prefix for inclusion guards instead of reserved __...
Even Rouault [Sun, 30 Jul 2017 17:46:52 +0000 (19:46 +0200)]
src/lib/openjp2/*.h: use OPJ_ prefix for inclusion guards instead of reserved __ (#587)

6 years agoopj_event_msg(): force zero termination of buffer
Even Rouault [Sun, 30 Jul 2017 17:27:01 +0000 (19:27 +0200)]
opj_event_msg(): force zero termination of buffer

6 years agoFix breakage of 22bf99ce0220811bfce1562ee61423cb0245b683
Even Rouault [Sun, 30 Jul 2017 17:26:47 +0000 (19:26 +0200)]
Fix breakage of 22bf99ce0220811bfce1562ee61423cb0245b683

6 years agoTest return value of opj_j2k_setup_decoding_tile() (commit https://github.com/uclouva...
Even Rouault [Sun, 30 Jul 2017 17:07:16 +0000 (19:07 +0200)]
Test return value of opj_j2k_setup_decoding_tile() (commit https://github.com/uclouvain/openjpeg/pull/561/commits/ec31fa0c7f1ff8979312c07296cba41584c458a0 by  ak-dxdy, #561)

6 years agoFix warnings in USE_JPIP compilation mode
Even Rouault [Sun, 30 Jul 2017 16:46:34 +0000 (18:46 +0200)]
Fix warnings in USE_JPIP compilation mode

6 years agoAvoid heap buffer overflow in function pnmtoimage of convert.c, and unsigned integer...
Even Rouault [Sun, 30 Jul 2017 16:43:25 +0000 (18:43 +0200)]
Avoid heap buffer overflow in function pnmtoimage of convert.c, and unsigned integer overflow in opj_image_create() (CVE-2016-9118, #861)

6 years agoFix Doxygen warnings (patch derived from Winfried's doxygen-dif.txt.zip, #849)
Even Rouault [Sun, 30 Jul 2017 16:18:59 +0000 (18:18 +0200)]
Fix Doxygen warnings (patch derived from Winfried's doxygen-dif.txt.zip, #849)

6 years agoj2k.c: remove hardcoded constants related to m_state, and useless FIXME
Even Rouault [Sun, 30 Jul 2017 15:26:03 +0000 (17:26 +0200)]
j2k.c: remove hardcoded constants related to m_state, and useless FIXME

6 years agoAvoid p_stream->m_user_data_length >= (OPJ_UINT64)p_stream->m_byte_offset assertion...
Even Rouault [Sun, 30 Jul 2017 14:48:15 +0000 (16:48 +0200)]
Avoid p_stream->m_user_data_length >= (OPJ_UINT64)p_stream->m_byte_offset assertion in opj_stream_get_number_byte_left(). Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2786. Credit to OSS Fuzz

6 years agoopj_j2k_set_decode_area: replace assertions by runtime checks. Fixes https://bugs...
Even Rouault [Sun, 30 Jul 2017 13:35:47 +0000 (15:35 +0200)]
opj_j2k_set_decode_area: replace assertions by runtime checks. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2795. Credit to OSS Fuzz

6 years agoopj_tcd_dc_level_shift_decode: avoid int32 overflow when prec == 31. Fixes https...
Even Rouault [Sun, 30 Jul 2017 13:22:24 +0000 (15:22 +0200)]
opj_tcd_dc_level_shift_decode: avoid int32 overflow when prec == 31. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2799. Credit to OSS Fuzz

6 years agosrc/bin/jpwl/convert.c: fix memleak (fix suggested by maddin200, #631)
Even Rouault [Sat, 29 Jul 2017 19:11:23 +0000 (21:11 +0200)]
src/bin/jpwl/convert.c: fix memleak (fix suggested by maddin200, #631)

6 years agoFix warnings in pi.c raised by VS11 analyze (#190)
Even Rouault [Sat, 29 Jul 2017 17:43:23 +0000 (19:43 +0200)]
Fix warnings in pi.c raised by VS11 analyze (#190)

6 years agoFix write heap buffer overflow in opj_mqc_byteout(). Discovered by Ke Liu of Tencent...
Even Rouault [Sat, 29 Jul 2017 17:13:49 +0000 (19:13 +0200)]
Fix write heap buffer overflow in opj_mqc_byteout(). Discovered by Ke Liu of Tencent's Xuanwu LAB (#835)

6 years agoopj_pi_update_decode_poc(): limit layno1 to the number of layers (CVE-2016-1626 and...
Even Rouault [Sat, 29 Jul 2017 17:03:13 +0000 (19:03 +0200)]
opj_pi_update_decode_poc(): limit layno1 to the number of layers (CVE-2016-1626 and CVE-2016-1628, #850)

This has been recently fixed in a less elegant way per
80818c39f5bfbac37768fcee95b0ffeceaa77264

6 years agoopj_tcd_get_decoded_tile_size(): fix potential UINT32 overflow (#854, CVE-2016-5152)
Even Rouault [Sat, 29 Jul 2017 16:38:16 +0000 (18:38 +0200)]
opj_tcd_get_decoded_tile_size(): fix potential UINT32 overflow (#854, CVE-2016-5152)

Fix derived from https://pdfium.googlesource.com/pdfium.git/+/d8cc503575463ff3d81b22dad292665f2c88911e/third_party/libopenjpeg20/0018-tcd_get_decoded_tile_size.patch

6 years agocolor_cielab_to_rgb(): reject images with components of different dimensions to void...
Even Rouault [Sat, 29 Jul 2017 15:56:12 +0000 (17:56 +0200)]
color_cielab_to_rgb(): reject images with components of different dimensions to void read heap buffer overflow (#909)

6 years agoFix breakage of 2fa0fc61f2d546c8b67e7c5a9cbc61d98e1f7af0 (#970)
Even Rouault [Sat, 29 Jul 2017 15:51:10 +0000 (17:51 +0200)]
Fix breakage of 2fa0fc61f2d546c8b67e7c5a9cbc61d98e1f7af0 (#970)

6 years agoimagetopnm(): make sure the alpha component has same dimension as other components...
Even Rouault [Sat, 29 Jul 2017 15:28:55 +0000 (17:28 +0200)]
imagetopnm(): make sure the alpha component has same dimension as other components to avoid read heap buffer overflow (#970)

6 years agoopj_t1_decode_cblk(): avoid undefined shift behaviour. Fixes https://bugs.chromium...
Even Rouault [Sat, 29 Jul 2017 14:34:35 +0000 (16:34 +0200)]
opj_t1_decode_cblk(): avoid undefined shift behaviour. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2487. Credit to OSS Fuzz

6 years agoopj_t1_clbl_decode_processor(): avoid undefined behaviour if roishift >= 31. Fixes...
Even Rouault [Sat, 29 Jul 2017 14:29:11 +0000 (16:29 +0200)]
opj_t1_clbl_decode_processor(): avoid undefined behaviour if roishift >= 31. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2506. Credit to OSS Fuzz

6 years agoAvoid assertion in opj_j2k_merge_ppt() in case premature EOC is encountered in opj_j2...
Even Rouault [Sat, 29 Jul 2017 14:22:36 +0000 (16:22 +0200)]
Avoid assertion in opj_j2k_merge_ppt() in case premature EOC is encountered in opj_j2k_read_tile_header(). Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2785. Credit to OSS Fuzz

6 years agoopj_pi_next_pcrl(): avoid undefined shift behaviour. Fixes https://bugs.chromium...
Even Rouault [Sat, 29 Jul 2017 13:52:11 +0000 (15:52 +0200)]
opj_pi_next_pcrl(): avoid undefined shift behaviour. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2787. Credit to OSS Fuzz

6 years agoopj_int_ceildiv(): fix int32 overflow. Fixes https://bugs.chromium.org/p/oss-fuzz...
Even Rouault [Fri, 28 Jul 2017 20:15:47 +0000 (22:15 +0200)]
opj_int_ceildiv(): fix int32 overflow. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2494. Credit to OSS Fuzz

6 years agoopj_tcd_dc_level_shift_decode(): avoid int overflow. Fixes https://bugs.chromium...
Even Rouault [Fri, 28 Jul 2017 20:06:26 +0000 (22:06 +0200)]
opj_tcd_dc_level_shift_decode(): avoid int overflow. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2516. Credit to OSS Fuzz

6 years agoFix null pointer dereference in opj_jp2_apply_pclr(). Fixes https://bugs.chromium...
Even Rouault [Fri, 28 Jul 2017 19:55:22 +0000 (21:55 +0200)]
Fix null pointer dereference in opj_jp2_apply_pclr(). Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2558. Credit to OSS Fuzz

6 years agoFix null pointer dereference in opj_j2k_add_mct() (#895)
Even Rouault [Fri, 28 Jul 2017 19:39:30 +0000 (21:39 +0200)]
Fix null pointer dereference in opj_j2k_add_mct() (#895)

Fixes openjeg-crashes-2017-07-27/issue879-poc1.j2k of #895

6 years agoAvoid use-after-free when a MCT marker is found after a MCC one (#895)
Even Rouault [Fri, 28 Jul 2017 19:29:55 +0000 (21:29 +0200)]
Avoid use-after-free when a MCT marker is found after a MCC one (#895)

Fixes openjeg-crashes-2017-07-27/issue880-poc2.j2k of #895

6 years agoAvoid undefined shift behaviour if bit depth == 32 (#895)
Even Rouault [Thu, 27 Jul 2017 20:29:17 +0000 (22:29 +0200)]
Avoid undefined shift behaviour if bit depth == 32 (#895)

Fixes openjeg-crashes-2017-07-27/id:000000,sig:11,src:003798,op:ext_AO,pos:128.jp2

6 years agoopj_j2k_update_image_data / opj_tcd_update_tile_data: fix unaligned load/store (...
Even Rouault [Thu, 27 Jul 2017 17:34:54 +0000 (19:34 +0200)]
opj_j2k_update_image_data / opj_tcd_update_tile_data: fix unaligned load/store (#895)

When components don't have the same width, unaligned load/store are possible.

Fixes openjeg-crashes-2017-07-27/id:000000,sig:11,src:001342,op:flip4,pos:162.jp2 of #895

6 years agoopj_pi_next_rpcl / opj_pi_next_pcrl / opj_pi_next_cprl: avoid int overflow (#895)
Even Rouault [Thu, 27 Jul 2017 17:22:14 +0000 (19:22 +0200)]
opj_pi_next_rpcl / opj_pi_next_pcrl / opj_pi_next_cprl: avoid int overflow (#895)

Fixes int overflow on openjeg-crashes-2017-07-27/id:000000,sig:08,src:000879,op:flip2,pos:128.jp2

6 years agoopj_jp2_check_color(): replace assertion regarding mtyp by runtime check (#672, ...
Even Rouault [Thu, 27 Jul 2017 16:51:51 +0000 (18:51 +0200)]
opj_jp2_check_color(): replace assertion regarding mtyp by runtime check (#672, #895)

Fixes test case openjeg-crashes-2017-07-27/id:000000,sig:06,src:000001,op:flip1,pos:808.jp2
of #895

6 years agoAvoids undefined shift behaviour in m_dc_level_shift computation
Even Rouault [Wed, 26 Jul 2017 21:25:38 +0000 (23:25 +0200)]
Avoids undefined shift behaviour in m_dc_level_shift computation

Fixes warning found on clusterfuzz-testcase-minimized-5146316340461568
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2495

Credit to OSS Fuzz

6 years agoFix various undefined shift behaviour in pi.c
Even Rouault [Wed, 26 Jul 2017 20:53:59 +0000 (22:53 +0200)]
Fix various undefined shift behaviour in pi.c

Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2496
Credit to OSS Fuzz

6 years agoAvoid potential undefined shift behaviour in opj_bio_read() from opj_t2_read_packet_h...
Even Rouault [Wed, 26 Jul 2017 20:22:44 +0000 (22:22 +0200)]
Avoid potential undefined shift behaviour in opj_bio_read() from opj_t2_read_packet_header()

Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2485
Credit to OSS Fuzz

6 years agoMerge pull request #800 from rouault/tier1_optimizations_multithreading_pterm_check
Even Rouault [Wed, 26 Jul 2017 20:05:32 +0000 (22:05 +0200)]
Merge pull request #800 from rouault/tier1_optimizations_multithreading_pterm_check

Implement predictive termination check

6 years agoT1 decoder: check code stream errors when predictable termination is enabled and... 800/head
Even Rouault [Wed, 26 Jul 2017 19:39:50 +0000 (21:39 +0200)]
T1 decoder: check code stream errors when predictable termination is enabled and emit a warning when errors are found

6 years agoSpelling fixes (patch by ka7, #890, rebased on top of master)
Even Rouault [Wed, 26 Jul 2017 19:06:38 +0000 (21:06 +0200)]
Spelling fixes (patch by ka7, #890, rebased on top of master)

6 years agoReformat src/bin/wx/OPJViewer/source/OPJThreads.cpp src/bin/wx/OPJViewer/source/imagj...
Even Rouault [Wed, 26 Jul 2017 19:04:01 +0000 (21:04 +0200)]
Reformat src/bin/wx/OPJViewer/source/OPJThreads.cpp src/bin/wx/OPJViewer/source/imagjpeg2000.cpp wrapping/java/openjp2/JavaOpenJPEG.c

6 years agoopj_decompress: fix null pointer dereference on comps[].data on id_000167,sig_11...
Even Rouault [Wed, 26 Jul 2017 18:13:09 +0000 (20:13 +0200)]
opj_decompress: fix null pointer dereference on comps[].data on id_000167,sig_11,src_006079,op_havoc,rep_4 (#939)

6 years agoFix assertion / memory leak in opj_j2k_merge_ppt() on corrupted images (#939)
Even Rouault [Wed, 26 Jul 2017 17:49:38 +0000 (19:49 +0200)]
Fix assertion / memory leak in opj_j2k_merge_ppt() on corrupted images (#939)

Fixes issue on id:000020,sig:06,src:001958,op:flip4,pos:149 that has two
SOT markers for the same tile with the same tile part number, causing
opj_j2k_merge_ppt() to be called several times.

6 years agoAvoid division by zero in opj_pi_next_rpcl, opj_pi_next_pcrl, opj_pi_next_cprl (...
Even Rouault [Wed, 26 Jul 2017 16:05:56 +0000 (18:05 +0200)]
Avoid division by zero in opj_pi_next_rpcl, opj_pi_next_pcrl, opj_pi_next_cprl (#938)

Fixes crash on id_000004,sig_06,src_000679,op_arith8,pos_49,val_-17

6 years agoAvoid index out of bounds access to pi->include[] (#938)
Even Rouault [Wed, 26 Jul 2017 10:24:26 +0000 (12:24 +0200)]
Avoid index out of bounds access to pi->include[] (#938)

Fix id:000098,sig:11,src:005411,op:havoc,rep:2 test case

6 years agoAvoid division by zero in opj_pi_next_rpcl, opj_pi_next_pcrl and opj_pi_next_cprl...
Even Rouault [Wed, 26 Jul 2017 09:30:56 +0000 (11:30 +0200)]
Avoid division by zero in opj_pi_next_rpcl, opj_pi_next_pcrl and opj_pi_next_cprl (#938)

Fixes issues with id:000026,sig:08,src:002419,op:int32,pos:60,val:+32 and
id:000019,sig:08,src:001098,op:flip1,pos:49

6 years agoMerge pull request #969 from jeroen/staticlibs
Even Rouault [Thu, 13 Jul 2017 11:33:21 +0000 (13:33 +0200)]
Merge pull request #969 from jeroen/staticlibs

install static libraries

6 years agoinstall static libraries 969/head
Jeroen [Thu, 13 Jul 2017 09:34:15 +0000 (11:34 +0200)]
install static libraries

6 years agoComment fix
Even Rouault [Thu, 6 Jul 2017 10:11:37 +0000 (12:11 +0200)]
Comment fix

6 years agoRemove unused m_DA_x0, m_DA_y0, m_DA_x1, m_DA_y1 members from opj_j2k_dec structure
Even Rouault [Wed, 5 Jul 2017 19:33:42 +0000 (21:33 +0200)]
Remove unused m_DA_x0, m_DA_y0, m_DA_x1, m_DA_y1 members from opj_j2k_dec structure

6 years agoAdd tests/fuzzers for OSS Fuzz (#965)
Even Rouault [Mon, 3 Jul 2017 12:14:03 +0000 (14:14 +0200)]
Add tests/fuzzers for OSS Fuzz (#965)

6 years agoopj_j2k_read_header_procedure(): validate marker size to avoid excessive memory alloc...
Even Rouault [Mon, 3 Jul 2017 12:33:57 +0000 (14:33 +0200)]
opj_j2k_read_header_procedure(): validate marker size to avoid excessive memory allocation attempt

6 years agoMerge pull request #954 from jeroen/static
Even Rouault [Mon, 3 Jul 2017 10:03:29 +0000 (12:03 +0200)]
Merge pull request #954 from jeroen/static

build both shared and static library

6 years agoMerge pull request #964 from rouault/remove_useless_knownfailures
Even Rouault [Sat, 1 Jul 2017 11:51:52 +0000 (13:51 +0200)]
Merge pull request #964 from rouault/remove_useless_knownfailures

Remove useless knownfailures (since LAZY encoding is fixed)

6 years agoMerge pull request #963 from rouault/travis_avx2
Even Rouault [Sat, 1 Jul 2017 10:54:39 +0000 (12:54 +0200)]
Merge pull request #963 from rouault/travis_avx2

Enable AVX2 at runtime on Travis-CI and AppVeyor

6 years agoAdd tools/travis-ci/knownfailures-Ubuntu14.04-clang3.8.0-x86_64-Release-3rdP.txt... 963/head
Even Rouault [Sat, 1 Jul 2017 02:15:36 +0000 (04:15 +0200)]
Add tools/travis-ci/knownfailures-Ubuntu14.04-clang3.8.0-x86_64-Release-3rdP.txt (copied from knownfailures-Ubuntu12.04-clang3.9.0-x86_64-Release-3rdP.txt)

6 years agoappveyor.yml: add a /arch:AVX2 config on Windows
Even Rouault [Sat, 1 Jul 2017 00:53:55 +0000 (02:53 +0200)]
appveyor.yml: add a /arch:AVX2 config on Windows

Try running the tests if the CPU supports AVX2.

6 years agoRemove useless knownfailures (since LAZY encoding is fixed) 964/head
Even Rouault [Sat, 1 Jul 2017 02:24:46 +0000 (04:24 +0200)]
Remove useless knownfailures (since LAZY encoding is fixed)

6 years ago.travis.yml: try to run tests in -mavx2 mode if the CPU supports it
Even Rouault [Fri, 30 Jun 2017 23:46:55 +0000 (01:46 +0200)]
.travis.yml: try to run tests in -mavx2 mode if the CPU supports it

And modify settings so as to hae a AVX2 compatible CPU

6 years agoIDWT 5x3: fix bug in AVX2 implementation (#953, #957)
Even Rouault [Thu, 29 Jun 2017 22:03:05 +0000 (00:03 +0200)]
IDWT 5x3: fix bug in AVX2 implementation (#953, #957)

6 years agoINSTALL.md: add section discussing how to enable CPU specific optimizations
Even Rouault [Mon, 26 Jun 2017 11:13:26 +0000 (13:13 +0200)]
INSTALL.md: add section discussing how to enable CPU specific optimizations

6 years agoMerge pull request #957 from rouault/idwt_53_improvements
Even Rouault [Mon, 26 Jun 2017 10:45:34 +0000 (12:45 +0200)]
Merge pull request #957 from rouault/idwt_53_improvements

IDWT 5x3 single-pass lifting and SSE2/AVX2 implementation

6 years agoStyle fix
Even Rouault [Wed, 21 Jun 2017 11:20:35 +0000 (13:20 +0200)]
Style fix

6 years agoFix mingw related warnings
Even Rouault [Wed, 21 Jun 2017 10:54:40 +0000 (12:54 +0200)]
Fix mingw related warnings

6 years agoFix clang warning about extraneous parentheses
Even Rouault [Wed, 21 Jun 2017 10:49:01 +0000 (12:49 +0200)]
Fix clang warning about extraneous parentheses

6 years ago.travis.yml: add a configuration to test compilation of AVX2 (but disable tests since... 957/head
Even Rouault [Wed, 21 Jun 2017 10:28:51 +0000 (12:28 +0200)]
.travis.yml: add a configuration to test compilation of AVX2 (but disable tests since Travis doesn't have AVX2 compatible machines)

6 years agoIDWT 5x3: generalize SSE2 version for AVX2
Even Rouault [Wed, 21 Jun 2017 10:12:58 +0000 (12:12 +0200)]
IDWT 5x3: generalize SSE2 version for AVX2

Thanks to our macros that abstract SSE use, the functions can use
AVX2 when available (at compile time)

This brings an extra 23% speed improvement on bench_dwt in 64bit builds
with AVX2 compared to SSE2.

6 years agodwt.c: small cleanup
Even Rouault [Tue, 20 Jun 2017 23:07:56 +0000 (01:07 +0200)]
dwt.c: small cleanup

6 years agoEnable __SSE__ / __SSE2__ with Visual Studio
Even Rouault [Tue, 20 Jun 2017 16:24:21 +0000 (18:24 +0200)]
Enable __SSE__ / __SSE2__ with Visual Studio

6 years agoImprove performance of inverse DWT 5x3 (#953)
Even Rouault [Tue, 20 Jun 2017 15:56:25 +0000 (17:56 +0200)]
Improve performance of inverse DWT 5x3 (#953)

* Use single-pass lifting inverse wavelet transform.
* For vertical pass, use SSE2 when available so as to process 8 columns
  in parallel. This is the most beneficial improvement, since the
  vertical pass involves a lot of cache trashing.

With the bench_dwt utility with default arguments (16383x16383 image),
time goes from 4.064 s to 1.212 s.

6 years agoAdd bench_dwt program (compiled only if BUILD_BENCH_DWT=ON)
Even Rouault [Tue, 20 Jun 2017 15:56:19 +0000 (17:56 +0200)]
Add bench_dwt program (compiled only if BUILD_BENCH_DWT=ON)

6 years agoMerge pull request #955 from rouault/remove_opj_nosanitize
Even Rouault [Sat, 17 Jun 2017 22:49:20 +0000 (00:49 +0200)]
Merge pull request #955 from rouault/remove_opj_nosanitize

Remove OPJ_NOSANITIZE in opj_bio_read() and opj_bio_write() (#761)

6 years agoRemove OPJ_NOSANITIZE in opj_bio_read() and opj_bio_write() (#761) 955/head
Even Rouault [Sat, 17 Jun 2017 17:15:00 +0000 (19:15 +0200)]
Remove OPJ_NOSANITIZE in opj_bio_read() and opj_bio_write() (#761)

Commit 29313eb5 introduced those flags to avoid issues with
-fsanitize=unsigned-integer-overflow
However it is better just to rewrite the loop to avoid such condition
to occur.