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(s - buffer); + + if (remaining == 0) { + break; + } if (i != 0) { - s += snprintf(s, n, ", "); + int32_t written = snprintf(s, remaining, ", "); + if (written < 0 || static_cast(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(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(s - buffer); + + if (remaining == 0) { + break; + } if (i != 0) { - s += snprintf(s, n, ", "); + int32_t written = snprintf(s, remaining, ", "); + if (written < 0 || static_cast(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(written) >= remaining) { + break; + } + s += written; } return buffer;