From 711156629f3ddca81f7c33c0307e1eaf32f27f84 Mon Sep 17 00:00:00 2001 From: tpcwang Date: Wed, 23 Mar 2016 15:22:33 -0700 Subject: [PATCH] Fix TDebugProtocol::writeString to avoid assertion in isprint --- lib/cpp/src/thrift/protocol/TDebugProtocol.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/cpp/src/thrift/protocol/TDebugProtocol.cpp b/lib/cpp/src/thrift/protocol/TDebugProtocol.cpp index 4687e82f832..09b978c2d7f 100644 --- a/lib/cpp/src/thrift/protocol/TDebugProtocol.cpp +++ b/lib/cpp/src/thrift/protocol/TDebugProtocol.cpp @@ -347,7 +347,9 @@ uint32_t TDebugProtocol::writeString(const string& str) { output += "\\\\"; } else if (*it == '"') { output += "\\\""; - } else if (std::isprint(*it)) { + // passing characters <0 to std::isprint causes asserts. isprint takes an + // int, so we need to be careful of sign extension + } else if (std::isprint((unsigned char)*it)) { output += *it; } else { switch (*it) {