summaryrefslogtreecommitdiff
path: root/test/cctest
diff options
context:
space:
mode:
authorDenys Otrishko <shishugi@gmail.com>2019-01-21 23:16:46 +0200
committerDaniel Bevenius <daniel.bevenius@gmail.com>2019-01-25 08:19:11 +0100
commit80441c8086aa5d5d74d93b5c6b779eab734149d4 (patch)
treebf8da2af12e63190528a1c65adfa5af4cf587a5f /test/cctest
parentf8d52c25c478c6eb8b182f0b4ea33a58f3fa2aad (diff)
downloadandroid-node-v8-80441c8086aa5d5d74d93b5c6b779eab734149d4.tar.gz
android-node-v8-80441c8086aa5d5d74d93b5c6b779eab734149d4.tar.bz2
android-node-v8-80441c8086aa5d5d74d93b5c6b779eab734149d4.zip
src,test: fix JSON escaping in node-report
Previously only simple escape sequences were handled (i.e. \n, \t, r etc.). This commit adds escaping of other control symbols in the range of 0x00 to 0x20. Also, this replaces multiple find+replace calls with a single pass replacer. PR-URL: https://github.com/nodejs/node/pull/25626 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Diffstat (limited to 'test/cctest')
-rw-r--r--test/cctest/test_report_util.cc26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/cctest/test_report_util.cc b/test/cctest/test_report_util.cc
new file mode 100644
index 0000000000..e32558ef75
--- /dev/null
+++ b/test/cctest/test_report_util.cc
@@ -0,0 +1,26 @@
+#include "node_report.h"
+
+#include "gtest/gtest.h"
+
+TEST(ReportUtilTest, EscapeJsonChars) {
+ using report::EscapeJsonChars;
+ EXPECT_EQ("abc", EscapeJsonChars("abc"));
+ EXPECT_EQ("abc\\n", EscapeJsonChars("abc\n"));
+ EXPECT_EQ("abc\\nabc", EscapeJsonChars("abc\nabc"));
+ EXPECT_EQ("abc\\\\", EscapeJsonChars("abc\\"));
+ EXPECT_EQ("abc\\\"", EscapeJsonChars("abc\""));
+
+ const std::string expected[0x20] = {
+ "\\u0000", "\\u0001", "\\u0002", "\\u0003", "\\u0004", "\\u0005",
+ "\\u0006", "\\u0007", "\\b", "\\t", "\\n", "\\v", "\\f", "\\r",
+ "\\u000e", "\\u000f", "\\u0010", "\\u0011", "\\u0012", "\\u0013",
+ "\\u0014", "\\u0015", "\\u0016", "\\u0017", "\\u0018", "\\u0019",
+ "\\u001a", "\\u001b", "\\u001c", "\\u001d", "\\u001e", "\\u001f"
+ };
+ for (int i = 0; i < 0x20; ++i) {
+ char symbols[1] = { static_cast<char>(i) };
+ std::string input(symbols, 1);
+ EXPECT_EQ(expected[i], EscapeJsonChars(input));
+ EXPECT_EQ("a" + expected[i], EscapeJsonChars("a" + input));
+ }
+}