}
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 (!strncasecmp((const char*) &pTmp, "<", 2)) ch = '<';
+ else if (!strncasecmp((const char*) &pTmp, ">", 2)) ch = '>';
+ else if (!strncasecmp((const char*) &pTmp, """, 4)) ch = '"';
+ else if (!strncasecmp((const char*) &pTmp, "&", 3)) ch = '&';
}
if (ch > 0) {
--- /dev/null
+/*
+ * Copyright (C) 2004-2011 See the AUTHORS file for details.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#include "ZNCString.h"
+#include "ZNCDebug.h"
+
+static int testEqual(const CString& a, const CString& b, const CString& what)
+{
+ if (a == b)
+ return 0;
+ std::cout << what << " failed for '" << b << "', result is '" << a << "'\n";
+ return 1;
+}
+
+static int testString(const CString& in, const CString& url,
+ const CString& html, const CString& sql) {
+ CString out;
+ int errors = 0;
+
+ // Encode, then decode again and check we still got the same string
+
+ out = in.Escape_n(CString::EASCII, CString::EURL);
+ errors += testEqual(out, url, "EURL encode");
+ out = out.Escape_n(CString::EURL, CString::EASCII);
+ errors += testEqual(out, in, "EURL decode");
+
+ out = in.Escape_n(CString::EASCII, CString::EHTML);
+ errors += testEqual(out, html, "EHTML encode");
+ out = out.Escape_n(CString::EHTML, CString::EASCII);
+ errors += testEqual(out, in, "EHTML decode");
+
+ out = in.Escape_n(CString::EASCII, CString::ESQL);
+ errors += testEqual(out, sql, "ESQL encode");
+ out = out.Escape_n(CString::ESQL, CString::EASCII);
+ errors += testEqual(out, in, "ESQL decode");
+
+ return errors;
+}
+
+int main() {
+ unsigned int failed = 0;
+
+ // input url html sql
+ failed += testString("abcdefg", "abcdefg", "abcdefg", "abcdefg");
+ failed += testString("\n\t\r", "%0A%09%0D", "\n\t\r", "\\n\\t\\r");
+ failed += testString("'\"", "%27%22", "'"", "\\'\\\"");
+ failed += testString("&<>", "%26%3C%3E", "&<>", "&<>");
+
+ return failed;
+}
LDFLAGS := @LDFLAGS@
LIBS := @LIBS@
-TARGETS := ConfigTest
+TARGETS := ConfigTest EscapeTest
OBJS := $(addsuffix .o, $(TARGETS))
ZNC_OBJS := Config.o ZNCDebug.o FileUtils.o Utils.o ZNCString.o MD5.o SHA256.o
ZNC_OBJS := $(addprefix ../, $(ZNC_OBJS))
$(E) Linking $@...
$(Q)$(CXX) $(LDFLAGS) -o $@ $< $(ZNC_OBJS) $(LIBS)
+EscapeTest: EscapeTest.o
+ $(E) Linking $@...
+ $(Q)$(CXX) $(LDFLAGS) -o $@ $< $(ZNC_OBJS) $(LIBS)
+
%.o: %.cpp Makefile
@mkdir -p .depend
$(E) Building $@...
test: $(TARGETS)
for test in $(TARGETS) ; do \
- $$test || exit 1 ; \
+ ./$$test || exit 1 ; \
done