83 lines
3.6 KiB
Diff
83 lines
3.6 KiB
Diff
https://github.com/uclouvain/openjpeg/pull/1450
|
||
https://patch-diff.githubusercontent.com/raw/uclouvain/openjpeg/pull/1450.patch
|
||
|
||
From 093ccb0ecdba7d5c4b5363e7dda33b1769fcc08a Mon Sep 17 00:00:00 2001
|
||
From: Mark Mentovai <mark@chromium.org>
|
||
Date: Mon, 7 Nov 2022 09:32:02 -0500
|
||
Subject: [PATCH] openjp2/j2k: replace sprintf calls with snprintf
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
This makes it possible to build j2k.c without warnings using the macOS
|
||
13 SDK. Calls to sprintf are replaced with snprintf, passing appropriate
|
||
buffer sizes.
|
||
|
||
It doesn’t appear that any of the changed uses of sprintf were actually
|
||
unsafe, so no behavior change is expected aside from SDK compatibility.
|
||
|
||
The macOS 13 SDK deprecates sprintf as it’s difficult to use safely. The
|
||
deprecation warning message is visible when building C++, but it is not
|
||
normally visible when building plain C code due to a quirk in how
|
||
sprintf is declared in the SDK. However, the deprecation message is
|
||
visible when building plain C under Address Sanitizer
|
||
(-fsanitize=address). This discrepancy was discovered at
|
||
https://crbug.com/1381706 and reported to Apple with a copy at
|
||
https://openradar.appspot.com/FB11761475.
|
||
|
||
The macOS 13 SDK is packaged in Xcode 14.1, released on 2022-11-01. This
|
||
also affects the iOS 16 SDK and other 2022-era Apple OS SDKs packaged in
|
||
Xcode 14.0, released on 2022-09-12.
|
||
|
||
j2k.c is visible to the Chromium build via PDFium, and this change is
|
||
needed to allow Chromium to move forward to the macOS 13 SDK.
|
||
|
||
This change is limited to src/lib/openjp2. Other uses of sprintf were
|
||
found throughout openjpeg.
|
||
---
|
||
src/lib/openjp2/j2k.c | 13 ++++++++-----
|
||
1 file changed, 8 insertions(+), 5 deletions(-)
|
||
|
||
diff --git a/src/lib/openjp2/j2k.c b/src/lib/openjp2/j2k.c
|
||
index 923bd8916..354415df7 100644
|
||
--- a/src/lib/openjp2/j2k.c
|
||
+++ b/src/lib/openjp2/j2k.c
|
||
@@ -7954,21 +7954,24 @@ OPJ_BOOL opj_j2k_setup_encoder(opj_j2k_t *p_j2k,
|
||
|
||
/* UniPG>> */
|
||
#ifdef USE_JPWL
|
||
- cp->comment = (char*)opj_malloc(clen + strlen(version) + 11);
|
||
+ const size_t cp_comment_buf_size = clen + strlen(version) + 11;
|
||
+ cp->comment = (char*)opj_malloc(cp_comment_buf_size);
|
||
if (!cp->comment) {
|
||
opj_event_msg(p_manager, EVT_ERROR,
|
||
"Not enough memory to allocate comment string\n");
|
||
return OPJ_FALSE;
|
||
}
|
||
- sprintf(cp->comment, "%s%s with JPWL", comment, version);
|
||
+ snprintf(cp->comment, cp_comment_buf_size, "%s%s with JPWL",
|
||
+ comment, version);
|
||
#else
|
||
- cp->comment = (char*)opj_malloc(clen + strlen(version) + 1);
|
||
+ const size_t cp_comment_buf_size = clen + strlen(version) + 1;
|
||
+ cp->comment = (char*)opj_malloc(cp_comment_buf_size);
|
||
if (!cp->comment) {
|
||
opj_event_msg(p_manager, EVT_ERROR,
|
||
"Not enough memory to allocate comment string\n");
|
||
return OPJ_FALSE;
|
||
}
|
||
- sprintf(cp->comment, "%s%s", comment, version);
|
||
+ snprintf(cp->comment, cp_comment_buf_size, "%s%s", comment, version);
|
||
#endif
|
||
/* <<UniPG */
|
||
}
|
||
@@ -11973,7 +11976,7 @@ static OPJ_BOOL opj_j2k_move_data_from_codec_to_output_image(opj_j2k_t * p_j2k,
|
||
p_image->comps[compno].data = p_j2k->m_output_image->comps[compno].data;
|
||
#if 0
|
||
char fn[256];
|
||
- sprintf(fn, "/tmp/%d.raw", compno);
|
||
+ snprintf(fn, sizeof fn, "/tmp/%d.raw", compno);
|
||
FILE *debug = fopen(fn, "wb");
|
||
fwrite(p_image->comps[compno].data, sizeof(OPJ_INT32),
|
||
p_image->comps[compno].w * p_image->comps[compno].h, debug);
|