Re-instate commit c0fc2e881bc36aafb0bf539bf41889611370f60c
diff --git a/src/google/protobuf/stubs/strutil.cc b/src/google/protobuf/stubs/strutil.cc
index 594c8ea..8e9b398 100644
--- a/src/google/protobuf/stubs/strutil.cc
+++ b/src/google/protobuf/stubs/strutil.cc
@@ -501,9 +501,11 @@
if ((!utf8_safe || static_cast<uint8_t>(*src) < 0x80) &&
(!isprint(*src) ||
(last_hex_escape && isxdigit(*src)))) {
- if (dest_len - used < 4) // need space for 4 letter escape
+ // need space for 4 letter escape and the trailing '\0' to
+ // be written by snprintf.
+ if (dest_len - used < 5)
return -1;
- sprintf(dest + used, (use_hex ? "\\x%02x" : "\\%03o"),
+ snprintf(dest + used, 5, (use_hex ? "\\x%02x" : "\\%03o"),
static_cast<uint8_t>(*src));
is_hex_escape = use_hex;
used += 4;