Update OpenJPEG to 2.5.4 Upgrade OpenJPEG and remove the need to separately maintain 0049-check_after_parsing.patch. This supersedes https://pdfium-review.googlesource.com/135731. Bug: 445128546 Change-Id: I4d9af7baec551653b9b057e646ea8c48182ee722 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/135990 Reviewed-by: dan sinclair <dsinclair@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/third_party/libopenjpeg/0049-check_after_parsing.patch b/third_party/libopenjpeg/0049-check_after_parsing.patch deleted file mode 100644 index 8448324..0000000 --- a/third_party/libopenjpeg/0049-check_after_parsing.patch +++ /dev/null
@@ -1,35 +0,0 @@ -commit f809b80c67717c152a5ad30bf06774f00da4fd2d -Author: Sebastian Rasmussen <sebras@gmail.com> -Date: Thu Jan 16 02:13:43 2025 +0100 - - opj_jp2_read_header: Check for error after parsing header. - - Consider the case where the caller has not set the p_image - pointer to NULL before calling opj_read_header(). - - If opj_j2k_read_header_procedure() fails while obtaining the rest - of the marker segment when calling opj_stream_read_data() because - the data stream is too short, then opj_j2k_read_header() will - never have the chance to initialize p_image, leaving it - uninitialized. - - opj_jp2_read_header() will check the p_image value whether - opj_j2k_read_header() suceeded or failed. This may be detected as - an error in valgrind or ASAN. - - The fix is to check whether opj_j2k_read_header() suceeded before - using the output argument p_image. - -diff --git a/src/lib/openjp2/jp2.c b/src/lib/openjp2/jp2.c -index 4df055a5..da506318 100644 ---- a/src/lib/openjp2/jp2.c -+++ b/src/lib/openjp2/jp2.c -@@ -2873,7 +2873,7 @@ OPJ_BOOL opj_jp2_read_header(opj_stream_private_t *p_stream, - p_image, - p_manager); - -- if (p_image && *p_image) { -+ if (ret && p_image && *p_image) { - /* Set Image Color Space */ - if (jp2->enumcs == 16) { - (*p_image)->color_space = OPJ_CLRSPC_SRGB;
diff --git a/third_party/libopenjpeg/README.pdfium b/third_party/libopenjpeg/README.pdfium index 921be5a..eacdae0 100644 --- a/third_party/libopenjpeg/README.pdfium +++ b/third_party/libopenjpeg/README.pdfium
@@ -1,7 +1,7 @@ Name: OpenJPEG URL: https://github.com/uclouvain/openjpeg -Version: 2.5.3 (also update in opj_config*) -Revision: 210a8a5690d0da66f02d49420d7176a21ef409dc +Version: 2.5.4 +Revision: 6c4a29b00211eb0430fa0e5e890f1ce5c80f409f Security Critical: yes Shipped: yes License: BSD-2-Clause @@ -32,4 +32,7 @@ 0039-opj_mqc_renorme.patch: Remove unused opj_mqc_renorme(). 0041-remove_opj_clock.patch: Remove unused opj_clock.h include. 0046-func-ptr-mixup.patch: Prevent mixing up function pointer types. -0049-check_after_parsing.patch: Check for error after parsing header. + +Note: + +Also update the version numbers in opj_config*.
diff --git a/third_party/libopenjpeg/jp2.c b/third_party/libopenjpeg/jp2.c index af3b38f..b85c5cd 100644 --- a/third_party/libopenjpeg/jp2.c +++ b/third_party/libopenjpeg/jp2.c
@@ -2008,6 +2008,12 @@ if (image->icc_profile_len) { jp2->meth = 2; jp2->enumcs = 0; + jp2->color.icc_profile_buf = (OPJ_BYTE *)opj_malloc(image->icc_profile_len); + if (jp2->color.icc_profile_buf) { + jp2->color.icc_profile_len = image->icc_profile_len; + memcpy(jp2->color.icc_profile_buf, image->icc_profile_buf, + image->icc_profile_len); + } } else { jp2->meth = 1; if (image->color_space == OPJ_CLRSPC_SRGB) {
diff --git a/third_party/libopenjpeg/openjpeg.h b/third_party/libopenjpeg/openjpeg.h index 59abd32..fe2f1ee 100644 --- a/third_party/libopenjpeg/openjpeg.h +++ b/third_party/libopenjpeg/openjpeg.h
@@ -635,6 +635,8 @@ /* * Callback function prototype for read function + * @return returns The number of bytes delivered into + * \a p_buffer. -1 signals end of stream. */ typedef OPJ_SIZE_T(* opj_stream_read_fn)(void * p_buffer, OPJ_SIZE_T p_nb_bytes, void * p_user_data) ; @@ -1239,7 +1241,6 @@ /** * Sets the length of the user data for the stream. - * * @param p_stream the stream to modify * @param data_length length of the user_data. */ @@ -1437,6 +1438,8 @@ * that is to say at the highest resolution level, even if requesting the image at lower * resolution levels. * + * Note: If p_start_x, p_start_y, p_end_x, p_end_y are all 0, then the whole image is decoded. + * * Generally opj_set_decode_area() should be followed by opj_decode(), and the * codec cannot be re-used. * In the particular case of an image made of a single tile, several sequences of
diff --git a/third_party/libopenjpeg/opj_config.h b/third_party/libopenjpeg/opj_config.h index 5aefbfe..2f0301b 100644 --- a/third_party/libopenjpeg/opj_config.h +++ b/third_party/libopenjpeg/opj_config.h
@@ -13,4 +13,4 @@ /* Version number. */ #define OPJ_VERSION_MAJOR 2 #define OPJ_VERSION_MINOR 5 -#define OPJ_VERSION_BUILD 3 +#define OPJ_VERSION_BUILD 4
diff --git a/third_party/libopenjpeg/opj_config_private.h b/third_party/libopenjpeg/opj_config_private.h index 74a8845..4f9236c 100644 --- a/third_party/libopenjpeg/opj_config_private.h +++ b/third_party/libopenjpeg/opj_config_private.h
@@ -7,7 +7,7 @@ /* create opj_config_private.h for CMake */ #define OPJ_HAVE_INTTYPES_H 1 -#define OPJ_PACKAGE_VERSION "2.5.3" +#define OPJ_PACKAGE_VERSION "2.5.4" /* Not used by openjp2*/ /*#define HAVE_MEMORY_H 1*/