From b53b8c1658a3f52336616f329517cea9d1abd1bf Mon Sep 17 00:00:00 2001 From: Philippe Laporte Date: Tue, 10 Sep 2024 14:11:20 -0400 Subject: [PATCH 1/2] snprintf warning fix --- src/PyBytesProxyHandler.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/PyBytesProxyHandler.cc b/src/PyBytesProxyHandler.cc index 14da16c9..c49f2580 100644 --- a/src/PyBytesProxyHandler.cc +++ b/src/PyBytesProxyHandler.cc @@ -39,22 +39,22 @@ static bool array_valueOf(JSContext *cx, unsigned argc, JS::Value *vp) { for (size_t i = 0; i < byteLength; i++) { numberOfDigits += data[i] < 10 ? 1 : data[i] < 100 ? 2 : 3; } + const size_t STRING_LENGTH = byteLength + numberOfDigits; JS::Latin1Char *buffer = (JS::Latin1Char *)malloc(sizeof(JS::Latin1Char) * STRING_LENGTH); - size_t charIndex = 0; - snprintf((char *)&buffer[charIndex], 4, "%d", data[0]); - charIndex += data[0] < 10 ? 1 : data[0] < 100 ? 2 : 3; + snprintf((char *)&buffer[0], 3 + 1, "%hu", data[0]); + size_t charIndex = data[0] < 10 ? 1 : data[0] < 100 ? 2 : 3; for (size_t dataIndex = 1; dataIndex < byteLength; dataIndex++) { buffer[charIndex] = ','; charIndex++; - snprintf((char *)&buffer[charIndex], 4, "%d", data[dataIndex]); + snprintf((char *)&buffer[charIndex], 3 + 1, "%hu", data[dataIndex]); charIndex += data[dataIndex] < 10 ? 1 : data[dataIndex] < 100 ? 2 : 3; } JS::UniqueLatin1Chars str(buffer); - args.rval().setString(JS_NewLatin1String(cx, std::move(str), STRING_LENGTH - 1)); // don't include null byte + args.rval().setString(JS_NewLatin1String(cx, std::move(str), STRING_LENGTH - 1)); // don't include the null terminating byte return true; } From 52181e17c35711dc24a41f03f748387e3513a129 Mon Sep 17 00:00:00 2001 From: Philippe Laporte Date: Tue, 10 Sep 2024 15:39:51 -0400 Subject: [PATCH 2/2] check for snprintf return value for full fix to warning --- src/PyBytesProxyHandler.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/PyBytesProxyHandler.cc b/src/PyBytesProxyHandler.cc index c49f2580..525b0068 100644 --- a/src/PyBytesProxyHandler.cc +++ b/src/PyBytesProxyHandler.cc @@ -43,13 +43,17 @@ static bool array_valueOf(JSContext *cx, unsigned argc, JS::Value *vp) { const size_t STRING_LENGTH = byteLength + numberOfDigits; JS::Latin1Char *buffer = (JS::Latin1Char *)malloc(sizeof(JS::Latin1Char) * STRING_LENGTH); - snprintf((char *)&buffer[0], 3 + 1, "%hu", data[0]); + if (snprintf((char *)&buffer[0], 3 + 1, "%hu", data[0]) < 0) { + return false; + } size_t charIndex = data[0] < 10 ? 1 : data[0] < 100 ? 2 : 3; for (size_t dataIndex = 1; dataIndex < byteLength; dataIndex++) { buffer[charIndex] = ','; charIndex++; - snprintf((char *)&buffer[charIndex], 3 + 1, "%hu", data[dataIndex]); + if (snprintf((char *)&buffer[charIndex], 3 + 1, "%hu", data[dataIndex]) < 0) { + return false; + } charIndex += data[dataIndex] < 10 ? 1 : data[dataIndex] < 100 ? 2 : 3; }