mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
json: handle incomplete strings
If we run to the end of the string and the string is not closed, assume it closed.
This commit is contained in:
parent
799bc13c85
commit
d09cb1f05b
2 changed files with 14 additions and 2 deletions
|
|
@ -166,7 +166,7 @@ static inline int spa_json_next(struct spa_json * iter, const char **value)
|
||||||
}
|
}
|
||||||
if (iter->depth != 0)
|
if (iter->depth != 0)
|
||||||
return -1;
|
return -1;
|
||||||
if (iter->state == __BARE) {
|
if (iter->state != __STRUCT) {
|
||||||
iter->state = __STRUCT;
|
iter->state = __STRUCT;
|
||||||
return iter->cur - *value;
|
return iter->cur - *value;
|
||||||
}
|
}
|
||||||
|
|
@ -290,7 +290,7 @@ static inline int spa_json_parse_string(const char *val, int len, char *result)
|
||||||
result[len] = '\0';
|
result[len] = '\0';
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
for (p = val+1; p < val + len-1; p++) {
|
for (p = val+1; p < val + len; p++) {
|
||||||
if (*p == '\\') {
|
if (*p == '\\') {
|
||||||
p++;
|
p++;
|
||||||
if (*p == 'n')
|
if (*p == 'n')
|
||||||
|
|
@ -305,6 +305,8 @@ static inline int spa_json_parse_string(const char *val, int len, char *result)
|
||||||
*result++ = '\f';
|
*result++ = '\f';
|
||||||
else
|
else
|
||||||
*result++ = *p;
|
*result++ = *p;
|
||||||
|
} else if (*p == '\"') {
|
||||||
|
break;
|
||||||
} else
|
} else
|
||||||
*result++ = *p;
|
*result++ = *p;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -232,6 +232,16 @@ static void test_new_string(void)
|
||||||
spa_assert(!strcmp(pw_properties_get(props, "bar"), "baz"));
|
spa_assert(!strcmp(pw_properties_get(props, "bar"), "baz"));
|
||||||
|
|
||||||
pw_properties_free(props);
|
pw_properties_free(props);
|
||||||
|
|
||||||
|
props = pw_properties_new_string("foo=bar bar=\"baz");
|
||||||
|
spa_assert(props != NULL);
|
||||||
|
spa_assert(props->flags == 0);
|
||||||
|
spa_assert(props->dict.n_items == 2);
|
||||||
|
|
||||||
|
spa_assert(!strcmp(pw_properties_get(props, "foo"), "bar"));
|
||||||
|
spa_assert(!strcmp(pw_properties_get(props, "bar"), "baz"));
|
||||||
|
|
||||||
|
pw_properties_free(props);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_update(void)
|
static void test_update(void)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue