Skip to content

Commit 5debc09

Browse files
author
Your Name
committed
Replace all remaining sprintf() with snprintf()
Replace unsafe sprintf() calls with bounds-checked snprintf() in: - src/libImaging/QuantPngQuant.c (version string) - src/libImaging/JpegEncode.c (version string) - src/_webp.c (error messages and version string, 4 call sites) This is consistent with the fix applied in CVE-2024-28219 which addressed the same class of vulnerability in font rendering code. Security: CWE-120 (Buffer Copy without Checking Size of Input)
1 parent 3a44ba1 commit 5debc09

3 files changed

Lines changed: 9 additions & 7 deletions

File tree

src/_webp.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,10 @@ HandleMuxError(WebPMuxError err, char *chunk) {
5353
// Create the error message
5454
if (chunk == NULL) {
5555
message_len =
56-
sprintf(message, "could not assemble chunks: %s", kErrorMessages[-err]);
56+
snprintf(message, sizeof(message), "could not assemble chunks: %s", kErrorMessages[-err]);
5757
} else {
58-
message_len = sprintf(
59-
message, "could not set %.4s chunk: %s", chunk, kErrorMessages[-err]
58+
message_len = snprintf(
59+
message, sizeof(message), "could not set %.4s chunk: %s", chunk, kErrorMessages[-err]
6060
);
6161
}
6262
if (message_len < 0) {
@@ -649,8 +649,9 @@ WebPEncode_wrapper(PyObject *self, PyObject *args) {
649649
int error_code = (&pic)->error_code;
650650
char message[50] = "";
651651
if (error_code == VP8_ENC_ERROR_BAD_DIMENSION) {
652-
sprintf(
652+
snprintf(
653653
message,
654+
sizeof(message),
654655
": Image size exceeds WebP limit of %d pixels",
655656
WEBP_MAX_DIMENSION
656657
);
@@ -743,8 +744,9 @@ const char *
743744
WebPDecoderVersion_str(void) {
744745
static char version[20];
745746
int version_number = WebPGetDecoderVersion();
746-
sprintf(
747+
snprintf(
747748
version,
749+
sizeof(version),
748750
"%d.%d.%d",
749751
version_number >> 16,
750752
(version_number >> 8) % 0x100,

src/libImaging/JpegEncode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ ImagingJpegEncode(Imaging im, ImagingCodecState state, UINT8 *buf, int bytes) {
402402
const char *
403403
ImagingJpegVersion(void) {
404404
static char version[20];
405-
sprintf(version, "%d.%d", JPEG_LIB_VERSION / 10, JPEG_LIB_VERSION % 10);
405+
snprintf(version, sizeof(version), "%d.%d", JPEG_LIB_VERSION / 10, JPEG_LIB_VERSION % 10);
406406
return version;
407407
}
408408

src/libImaging/QuantPngQuant.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ const char *
126126
ImagingImageQuantVersion(void) {
127127
static char version[20];
128128
int number = liq_version();
129-
sprintf(version, "%d.%d.%d", number / 10000, (number / 100) % 100, number % 100);
129+
snprintf(version, sizeof(version), "%d.%d.%d", number / 10000, (number / 100) % 100, number % 100);
130130
return version;
131131
}
132132

0 commit comments

Comments
 (0)