Cherry-pick OpenJPEG patch for CVE-2025-54874

Cherry-pick a commit from upstream OpenJPEG:

https://github.com/uclouvain/openjpeg/commit/f809b80c67717c152a5ad30bf06774f00da4fd2d

Bug: 445128546
Change-Id: Ie402da715c8342cd948c41c5d44b3edbec29e33c
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/135731
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/third_party/libopenjpeg/0049-check_after_parsing.patch b/third_party/libopenjpeg/0049-check_after_parsing.patch
new file mode 100644
index 0000000..8448324
--- /dev/null
+++ b/third_party/libopenjpeg/0049-check_after_parsing.patch
@@ -0,0 +1,35 @@
+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 3a0dc1b..921be5a 100644
--- a/third_party/libopenjpeg/README.pdfium
+++ b/third_party/libopenjpeg/README.pdfium
@@ -32,3 +32,4 @@
 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.
diff --git a/third_party/libopenjpeg/jp2.c b/third_party/libopenjpeg/jp2.c
index 6b4d5db..af3b38f 100644
--- a/third_party/libopenjpeg/jp2.c
+++ b/third_party/libopenjpeg/jp2.c
@@ -2899,7 +2899,7 @@
                               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;