summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorGraham Leggett <minfrin@apache.org>2018-07-08 15:14:25 +0000
committerGraham Leggett <minfrin@apache.org>2018-07-08 15:14:25 +0000
commitd2e4e91024268494c8346f12a3e5959e44020fe6 (patch)
tree3ed4f3788f03d3cee7720e0d662b1bcac0f7ed35 /test
parent624aef9cef65fb242ea2ecde7006a79b5d3106cc (diff)
downloadapr-d2e4e91024268494c8346f12a3e5959e44020fe6.tar.gz
Fix the string unescape logic for multiple escaped characters. Add
a unit test. git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1835360 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'test')
-rw-r--r--test/testjson.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/test/testjson.c b/test/testjson.c
index 338149d4f..8ce9b148c 100644
--- a/test/testjson.c
+++ b/test/testjson.c
@@ -127,6 +127,28 @@ static void test_json_eof(abts_case * tc, void *data)
}
+static void test_json_string(abts_case * tc, void *data)
+{
+ apr_json_value_t *json = NULL;
+ apr_status_t status;
+ const char *src;
+ apr_off_t offset = 0;
+
+ /* "턞\"\t/\b\f\n\r\t"; */
+ const unsigned char expected[] = {237, 132, 158, 34, 9, 47, 8, 12, 10, 13, 9, 0};
+
+ src = "\"\\uD834\\uDD1E\\\"\\t\\/\\b\\f\\n\\r\\t\"";
+
+ status = apr_json_decode(&json, src, APR_JSON_VALUE_STRING, &offset,
+ APR_JSON_FLAGS_WHITESPACE, 10, p);
+
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, status);
+ ABTS_INT_EQUAL(tc, APR_JSON_STRING, json->type);
+
+ ABTS_ASSERT(tc, "check for string unescape match",
+ (memcmp(expected, json->value.string.p, json->value.string.len) == 0));
+}
+
abts_suite *testjson(abts_suite * suite)
{
suite = ADD_SUITE(suite);
@@ -134,6 +156,7 @@ abts_suite *testjson(abts_suite * suite)
abts_run_test(suite, test_json_identity, NULL);
abts_run_test(suite, test_json_level, NULL);
abts_run_test(suite, test_json_eof, NULL);
+ abts_run_test(suite, test_json_string, NULL);
return suite;
}