mirror of
https://github.com/json-c/json-c.git
synced 2026-04-04 21:09:06 +08:00
Fix issue #221: JSON_C_TO_STRING_NOSLASHESCAPE works incorrectly
Tests added.
This commit is contained in:
@@ -123,6 +123,12 @@ static int json_escape_str(struct printbuf *pb, const char *str, int len, int fl
|
|||||||
case '"':
|
case '"':
|
||||||
case '\\':
|
case '\\':
|
||||||
case '/':
|
case '/':
|
||||||
|
if((flags & JSON_C_TO_STRING_NOSLASHESCAPE) && c == '/')
|
||||||
|
{
|
||||||
|
pos++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if(pos - start_offset > 0)
|
if(pos - start_offset > 0)
|
||||||
printbuf_memappend(pb, str + start_offset, pos - start_offset);
|
printbuf_memappend(pb, str + start_offset, pos - start_offset);
|
||||||
|
|
||||||
@@ -133,12 +139,6 @@ static int json_escape_str(struct printbuf *pb, const char *str, int len, int fl
|
|||||||
else if(c == '\f') printbuf_memappend(pb, "\\f", 2);
|
else if(c == '\f') printbuf_memappend(pb, "\\f", 2);
|
||||||
else if(c == '"') printbuf_memappend(pb, "\\\"", 2);
|
else if(c == '"') printbuf_memappend(pb, "\\\"", 2);
|
||||||
else if(c == '\\') printbuf_memappend(pb, "\\\\", 2);
|
else if(c == '\\') printbuf_memappend(pb, "\\\\", 2);
|
||||||
else if(c == '/' &&
|
|
||||||
(flags & JSON_C_TO_STRING_NOSLASHESCAPE))
|
|
||||||
{
|
|
||||||
pos++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else if(c == '/') printbuf_memappend(pb, "\\/", 2);
|
else if(c == '/') printbuf_memappend(pb, "\\/", 2);
|
||||||
|
|
||||||
start_offset = ++pos;
|
start_offset = ++pos;
|
||||||
|
|||||||
@@ -63,6 +63,12 @@ int main(int argc, char **argv)
|
|||||||
printf("my_string.to_string(NOSLASHESCAPE)=%s\n", json_object_to_json_string_ext(my_string, JSON_C_TO_STRING_NOSLASHESCAPE));
|
printf("my_string.to_string(NOSLASHESCAPE)=%s\n", json_object_to_json_string_ext(my_string, JSON_C_TO_STRING_NOSLASHESCAPE));
|
||||||
json_object_put(my_string);
|
json_object_put(my_string);
|
||||||
|
|
||||||
|
my_string = json_object_new_string("/foo/bar/baz");
|
||||||
|
printf("my_string=%s\n", json_object_get_string(my_string));
|
||||||
|
printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string));
|
||||||
|
printf("my_string.to_string(NOSLASHESCAPE)=%s\n", json_object_to_json_string_ext(my_string, JSON_C_TO_STRING_NOSLASHESCAPE));
|
||||||
|
json_object_put(my_string);
|
||||||
|
|
||||||
my_string = json_object_new_string("foo");
|
my_string = json_object_new_string("foo");
|
||||||
printf("my_string=%s\n", json_object_get_string(my_string));
|
printf("my_string=%s\n", json_object_get_string(my_string));
|
||||||
printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string));
|
printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string));
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ my_string.to_string()="\\"
|
|||||||
my_string=/
|
my_string=/
|
||||||
my_string.to_string()="\/"
|
my_string.to_string()="\/"
|
||||||
my_string.to_string(NOSLASHESCAPE)="/"
|
my_string.to_string(NOSLASHESCAPE)="/"
|
||||||
|
my_string=/foo/bar/baz
|
||||||
|
my_string.to_string()="\/foo\/bar\/baz"
|
||||||
|
my_string.to_string(NOSLASHESCAPE)="/foo/bar/baz"
|
||||||
my_string=foo
|
my_string=foo
|
||||||
my_string.to_string()="foo"
|
my_string.to_string()="foo"
|
||||||
my_int=9
|
my_int=9
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ my_string.to_string()="\\"
|
|||||||
my_string=/
|
my_string=/
|
||||||
my_string.to_string()="\/"
|
my_string.to_string()="\/"
|
||||||
my_string.to_string(NOSLASHESCAPE)="/"
|
my_string.to_string(NOSLASHESCAPE)="/"
|
||||||
|
my_string=/foo/bar/baz
|
||||||
|
my_string.to_string()="\/foo\/bar\/baz"
|
||||||
|
my_string.to_string(NOSLASHESCAPE)="/foo/bar/baz"
|
||||||
my_string=foo
|
my_string=foo
|
||||||
my_string.to_string()="foo"
|
my_string.to_string()="foo"
|
||||||
my_int=9
|
my_int=9
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ my_string.to_string()="\\"
|
|||||||
my_string=/
|
my_string=/
|
||||||
my_string.to_string()="\/"
|
my_string.to_string()="\/"
|
||||||
my_string.to_string(NOSLASHESCAPE)="/"
|
my_string.to_string(NOSLASHESCAPE)="/"
|
||||||
|
my_string=/foo/bar/baz
|
||||||
|
my_string.to_string()="\/foo\/bar\/baz"
|
||||||
|
my_string.to_string(NOSLASHESCAPE)="/foo/bar/baz"
|
||||||
my_string=foo
|
my_string=foo
|
||||||
my_string.to_string()="foo"
|
my_string.to_string()="foo"
|
||||||
my_int=9
|
my_int=9
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ my_string.to_string()="\\"
|
|||||||
my_string=/
|
my_string=/
|
||||||
my_string.to_string()="\/"
|
my_string.to_string()="\/"
|
||||||
my_string.to_string(NOSLASHESCAPE)="/"
|
my_string.to_string(NOSLASHESCAPE)="/"
|
||||||
|
my_string=/foo/bar/baz
|
||||||
|
my_string.to_string()="\/foo\/bar\/baz"
|
||||||
|
my_string.to_string(NOSLASHESCAPE)="/foo/bar/baz"
|
||||||
my_string=foo
|
my_string=foo
|
||||||
my_string.to_string()="foo"
|
my_string.to_string()="foo"
|
||||||
my_int=9
|
my_int=9
|
||||||
|
|||||||
Reference in New Issue
Block a user