Files
packages/core/icu78/icu-78.2-fix-ssearch-fortify-overflow.patch
T
2026-03-21 12:43:00 -05:00

63 lines
2.0 KiB
Diff

diff --git a/icu/source/test/intltest/ssearch.cpp b/icu/source/test/intltest/ssearch.cpp
index a13df7f..615ea53 100644
--- a/icu/source/test/intltest/ssearch.cpp
+++ b/icu/source/test/intltest/ssearch.cpp
@@ -531,12 +531,26 @@ static char *printOffsets(char *buffer, size_t n, OrderList &list)
for(int32_t i = 0; i < size; i += 1) {
const Order *order = list.get(i);
+ size_t remaining = n - static_cast<size_t>(s - buffer);
+
+ if (remaining == 0) {
+ break;
+ }
if (i != 0) {
- s += snprintf(s, n, ", ");
+ int32_t written = snprintf(s, remaining, ", ");
+ if (written < 0 || static_cast<size_t>(written) >= remaining) {
+ break;
+ }
+ s += written;
+ remaining -= written;
}
- s += snprintf(s, n, "(%d, %d)", order->lowOffset, order->highOffset);
+ int32_t written = snprintf(s, remaining, "(%d, %d)", order->lowOffset, order->highOffset);
+ if (written < 0 || static_cast<size_t>(written) >= remaining) {
+ break;
+ }
+ s += written;
}
return buffer;
@@ -549,12 +563,26 @@ static char *printOrders(char *buffer, size_t n, OrderList &list)
for(int32_t i = 0; i < size; i += 1) {
const Order *order = list.get(i);
+ size_t remaining = n - static_cast<size_t>(s - buffer);
+
+ if (remaining == 0) {
+ break;
+ }
if (i != 0) {
- s += snprintf(s, n, ", ");
+ int32_t written = snprintf(s, remaining, ", ");
+ if (written < 0 || static_cast<size_t>(written) >= remaining) {
+ break;
+ }
+ s += written;
+ remaining -= written;
}
- s += snprintf(s, n, "%8.8X", order->order);
+ int32_t written = snprintf(s, remaining, "%8.8X", order->order);
+ if (written < 0 || static_cast<size_t>(written) >= remaining) {
+ break;
+ }
+ s += written;
}
return buffer;