diff --git a/ZNCString.cpp b/ZNCString.cpp index 8c511cbc..d8e0e9fa 100644 --- a/ZNCString.cpp +++ b/ZNCString.cpp @@ -1098,12 +1098,15 @@ static const char hexdigits[] = "0123456789abcdef"; CString& MCString::Encode(CString& sValue) const { CString sTmp; for (CString::iterator it = sValue.begin(); it != sValue.end(); ++it) { - if (isalnum(*it)) { - sTmp += *it; + // isalnum() needs unsigned char as argument and this code + // assumes unsigned, too. + unsigned char c = *it; + if (isalnum(c)) { + sTmp += c; } else { sTmp += "%"; - sTmp += hexdigits[*it >> 4]; - sTmp += hexdigits[*it & 0xf]; + sTmp += hexdigits[c >> 4]; + sTmp += hexdigits[c & 0xf]; sTmp += ";"; } }