diff --git a/ZNCString.cpp b/ZNCString.cpp index 06231f0a..0c9a9b4d 100644 --- a/ZNCString.cpp +++ b/ZNCString.cpp @@ -15,121 +15,6 @@ using std::stringstream; -static const char* const g_szHTMLescapes[256] = { - "�", 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0-9 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 10-19 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20-29 - 0, 0, 0, 0, """, 0, 0, 0, "&", "'", // 30-39 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 40-49 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 50-59 - "<", 0, ">", 0, 0, 0, 0, 0, 0, 0, // 60-69 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 70-79 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 80-89 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 90-99 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 100-109 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 110-119 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 120-129 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 130-139 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 140-149 - 0, 0, 0, "™", 0, 0, 0, 0, 0, 0, // 150-159 - " ", // 160 - "¡", // 161 - "¢", // 162 - "£", // 163 - "¤", // 164 - "¥", // 165 - "¦", // 166 - "§", // 167 - "¨", // 168 - "©", // 169 - "ª", // 170 - "«", // 171 - "¬", // 172 - "­", // 173 - "®", // 174 - "¯", // 175 - "°", // 176 - "±", // 177 - "²", // 178 - "³", // 179 - "´", // 180 - "µ", // 181 - "¶", // 182 - "·", // 183 - "¸", // 184 - "¹", // 185 - "º", // 186 - "»", // 187 - "¼", // 188 - "½", // 189 - "¾", // 190 - "¿", // 191 - "À", // 192 - "Á", // 193 - "Â", // 194 - "Ã", // 195 - "Ä", // 196 - "Å", // 197 - "Æ", // 198 - "Ç", // 199 - "È", // 200 - "É", // 201 - "Ê", // 202 - "Ë", // 203 - "Ì", // 204 - "Í", // 205 - "Î", // 206 - "Ï", // 207 - "Ð", // 208 - "Ñ", // 209 - "Ò", // 210 - "Ó", // 211 - "Ô", // 212 - "Õ", // 213 - "Ö", // 214 - "×", // 215 - "Ø", // 216 - "Ù", // 217 - "Ú", // 218 - "Û", // 219 - "Ü", // 220 - "Ý", // 221 - "Þ", // 222 - "ß", // 223 - "à", // 224 - "á", // 225 - "â", // 226 - "ã", // 227 - "ä", // 228 - "å", // 229 - "æ", // 230 - "ç", // 231 - "è", // 232 - "é", // 233 - "ê", // 234 - "ë", // 235 - "ì", // 236 - "í", // 237 - "î", // 238 - "ï", // 239 - "ð", // 240 - "ñ", // 241 - "ò", // 242 - "ó", // 243 - "ô", // 244 - "õ", // 245 - "ö", // 246 - "÷", // 247 - "ø", // 248 - "ù", // 249 - "ú", // 250 - "û", // 251 - "ü", // 252 - "ý", // 253 - "þ", // 254 - "ÿ", // 255 -}; - CString::CString(char c) : string() { stringstream s; s << c; *this = s.str(); } CString::CString(unsigned char c) : string() { stringstream s; s << c; *this = s.str(); } CString::CString(short i) : string() { stringstream s; s << i; *this = s.str(); } @@ -307,6 +192,8 @@ CString CString::Escape_n(EEscape eFrom, EEscape eTo) const { switch (eFrom) { case EHTML: if ((*p == '&') && (strnchr((unsigned char*) p, ';', sizeof(pTmp) - 1, pTmp, &iCounted))) { + // please note that we do not have any Unicode or UTF-8 support here at all. + if ((iCounted >= 3) && (pTmp[1] == '#')) { // do XML and HTML a < int base = 10; @@ -324,11 +211,11 @@ CString CString::Escape_n(EEscape eFrom, EEscape eTo) const { } } - for (unsigned int c = 0; c < 256; c++) { - if (g_szHTMLescapes[c] && strcmp(g_szHTMLescapes[c], (const char*) &pTmp) == 0) { - ch = c; - break; - } + if (ch == 0) { + if (!strncasecmp((const char*) &pTmp, "lt", 2)) ch = '<'; + else if (!strncasecmp((const char*) &pTmp, "gt", 2)) ch = '>'; + else if (!strncasecmp((const char*) &pTmp, "quot", 4)) ch = '"'; + else if (!strncasecmp((const char*) &pTmp, "amp", 3)) ch = '&'; } if (ch > 0) { @@ -394,9 +281,11 @@ CString CString::Escape_n(EEscape eFrom, EEscape eTo) const { switch (eTo) { case EHTML: - if (g_szHTMLescapes[ch]) { - sRet += g_szHTMLescapes[ch]; - } else { + if (ch == '<') sRet += "<"; + else if (ch == '>') sRet += ">"; + else if (ch == '"') sRet += """; + else if (ch == '&') sRet += "&"; + else { sRet += ch; } diff --git a/modules/webadmin/skins/dark-clouds/Header.tmpl b/modules/webadmin/skins/dark-clouds/Header.tmpl index 1310f242..fe0ff7ea 100644 --- a/modules/webadmin/skins/dark-clouds/Header.tmpl +++ b/modules/webadmin/skins/dark-clouds/Header.tmpl @@ -2,7 +2,7 @@ - + ZNC - Webadmin module - <?VAR Title ESC=HTML?> diff --git a/modules/webadmin/skins/default/Header.tmpl b/modules/webadmin/skins/default/Header.tmpl index 8769d20c..4759a5a8 100644 --- a/modules/webadmin/skins/default/Header.tmpl +++ b/modules/webadmin/skins/default/Header.tmpl @@ -1,8 +1,8 @@ + ZNC - <?VAR Title ESC=HTML?> - diff --git a/modules/webadmin/skins/graphiX/Header.tmpl b/modules/webadmin/skins/graphiX/Header.tmpl index 1310f242..fe0ff7ea 100644 --- a/modules/webadmin/skins/graphiX/Header.tmpl +++ b/modules/webadmin/skins/graphiX/Header.tmpl @@ -2,7 +2,7 @@ - + ZNC - Webadmin module - <?VAR Title ESC=HTML?> diff --git a/modules/webadmin/skins/ice/Header.tmpl b/modules/webadmin/skins/ice/Header.tmpl index fbc8d821..3cd8f72d 100644 --- a/modules/webadmin/skins/ice/Header.tmpl +++ b/modules/webadmin/skins/ice/Header.tmpl @@ -1,8 +1,8 @@ + ZNC - <?VAR Title ESC=HTML?> -