Fix std::iscntrl use in gtest-printers.cc

ContainsUnprintableControlCodes() in gtest-printers.cc passes a char
argument to std::iscntrl. Although its argument is an int, std::iscntrl
produces undefined behavior if its argument is not representable as an
unsigned char. The standard library on Windows asserts that the argument
is an unsigned char, resulting in an assertion crash on debug builds.
This commit is contained in:
Victor Costan 2018-02-09 22:42:32 -08:00
parent 222607a019
commit b3a1759eac

View File

@ -357,8 +357,10 @@ void PrintTo(const wchar_t* s, ostream* os) {
namespace {
bool ContainsUnprintableControlCodes(const char* str, size_t length) {
const unsigned char *s = reinterpret_cast<const unsigned char *>(str);
for (size_t i = 0; i < length; i++) {
char ch = *str++;
unsigned char ch = *s++;
if (std::iscntrl(ch)) {
switch (ch) {
case '\t':