THRIFT-3755 TDebugProtocol::writeString hits assert in isprint on Windows with debug CRT
This closes #960
diff --git a/lib/cpp/src/thrift/protocol/TDebugProtocol.cpp b/lib/cpp/src/thrift/protocol/TDebugProtocol.cpp
index 4687e82..09b978c 100644
--- a/lib/cpp/src/thrift/protocol/TDebugProtocol.cpp
+++ b/lib/cpp/src/thrift/protocol/TDebugProtocol.cpp
@@ -347,7 +347,9 @@
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) {