mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 01:30:38 +00:00
gstvalue: only unwrap string delimited with "
Don't unwrap strings that start but don't finish with a double quote. If a string is delimited by two quotes we unescape them and any special characters in the middle (like \" or \\). If the first character or the last character aren't a quote we assume it's part of an unescaped string. Moved some deserialize_string unit tests because we don't try to unwrap strings missing that second quote anymore. https://bugzilla.gnome.org/show_bug.cgi?id=688625
This commit is contained in:
parent
c565c5ecb4
commit
555e0211c8
2 changed files with 7 additions and 9 deletions
|
@ -3012,12 +3012,13 @@ gst_value_deserialize_string (GValue * dest, const gchar * s)
|
||||||
if (G_UNLIKELY (strcmp (s, "NULL") == 0)) {
|
if (G_UNLIKELY (strcmp (s, "NULL") == 0)) {
|
||||||
g_value_set_string (dest, NULL);
|
g_value_set_string (dest, NULL);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
} else if (G_LIKELY (*s != '"')) {
|
} else if (G_LIKELY (*s != '"' || s[strlen (s) - 1] != '"')) {
|
||||||
if (!g_utf8_validate (s, -1, NULL))
|
if (!g_utf8_validate (s, -1, NULL))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
g_value_set_string (dest, s);
|
g_value_set_string (dest, s);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
} else {
|
} else {
|
||||||
|
/* strings delimited with double quotes should be unwrapped */
|
||||||
gchar *str = gst_string_unwrap (s);
|
gchar *str = gst_string_unwrap (s);
|
||||||
if (G_UNLIKELY (!str))
|
if (G_UNLIKELY (!str))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
|
@ -542,21 +542,18 @@ GST_START_TEST (test_deserialize_string)
|
||||||
"\"foo\\%\"", "foo%"}, {
|
"\"foo\\%\"", "foo%"}, {
|
||||||
"\"0123456789_-+/:.\"", "0123456789_-+/:."}, {
|
"\"0123456789_-+/:.\"", "0123456789_-+/:."}, {
|
||||||
"\"Hello\\ World\"", "Hello World"}, {
|
"\"Hello\\ World\"", "Hello World"}, {
|
||||||
|
"\"Hello\\ World", "\"Hello\\ World"}, {
|
||||||
|
"\"\\", "\"\\"}, {
|
||||||
|
"\"\\0", "\"\\0"}, {
|
||||||
"", ""}, /* empty strings */
|
"", ""}, /* empty strings */
|
||||||
{
|
{
|
||||||
"\"\"", ""}, /* quoted empty string -> empty string */
|
"\"\"", ""}, /* quoted empty string -> empty string */
|
||||||
/* Expected FAILURES: */
|
/* Expected FAILURES: */
|
||||||
{
|
{
|
||||||
"\"", NULL}, /* missing second quote */
|
|
||||||
{
|
|
||||||
"\"Hello\\ World", NULL}, /* missing second quote */
|
|
||||||
{
|
|
||||||
"\"\\", NULL}, /* quote at end, missing second quote */
|
|
||||||
{
|
|
||||||
"\"\\0", NULL}, /* missing second quote */
|
|
||||||
{
|
|
||||||
"\"\\0\"", NULL}, /* unfinished escaped character */
|
"\"\\0\"", NULL}, /* unfinished escaped character */
|
||||||
{
|
{
|
||||||
|
"\"", NULL}, /* solitary quote */
|
||||||
|
{
|
||||||
"\" \"", NULL}, /* spaces must be escaped */
|
"\" \"", NULL}, /* spaces must be escaped */
|
||||||
#if 0
|
#if 0
|
||||||
/* FIXME 0.9: this test should fail, but it doesn't */
|
/* FIXME 0.9: this test should fail, but it doesn't */
|
||||||
|
|
Loading…
Reference in a new issue