mirror of
https://gitlab.freedesktop.org/pipewire/wireplumber.git
synced 2026-05-15 04:38:07 +02:00
spa-json: Fix conditional jump on uninitialised value when adding empty strings to builder
Similar to wp_spa_json_builder_add_property(), we need to make sure the dst array in wp_spa_json_builder_add_string() has room for the null character because builder_add() expects it. Fixes #471
This commit is contained in:
parent
baa0940d8b
commit
e91a9583d8
2 changed files with 34 additions and 1 deletions
|
|
@ -1074,7 +1074,7 @@ wp_spa_json_builder_add_float (WpSpaJsonBuilder *self, float value)
|
|||
void
|
||||
wp_spa_json_builder_add_string (WpSpaJsonBuilder *self, const gchar *value)
|
||||
{
|
||||
size_t size = (strlen (value) * 4) + 2;
|
||||
size_t size = (strlen (value) * 4) + 3;
|
||||
gchar dst[size];
|
||||
gint enc_size;
|
||||
ensure_separator (self, FALSE);
|
||||
|
|
|
|||
|
|
@ -280,6 +280,8 @@ test_spa_json_object_builder_parser_iterator (void)
|
|||
wp_spa_json_builder_add_float (b, 0.12f);
|
||||
wp_spa_json_builder_add_property (b, "key-string");
|
||||
wp_spa_json_builder_add_string (b, "str");
|
||||
wp_spa_json_builder_add_property (b, "key-empty-string");
|
||||
wp_spa_json_builder_add_string (b, "");
|
||||
json = wp_spa_json_builder_end (b);
|
||||
}
|
||||
|
||||
|
|
@ -322,6 +324,13 @@ test_spa_json_object_builder_parser_iterator (void)
|
|||
g_assert_nonnull (v_string);
|
||||
g_assert_cmpstr (v_string, ==, "str");
|
||||
|
||||
g_autofree gchar *key_empty_string = wp_spa_json_parser_get_string (p);
|
||||
g_assert_nonnull (key_empty_string);
|
||||
g_assert_cmpstr (key_empty_string, ==, "key-empty-string");
|
||||
g_autofree gchar *v_empty_string = wp_spa_json_parser_get_string (p);
|
||||
g_assert_nonnull (v_empty_string);
|
||||
g_assert_cmpstr (v_empty_string, ==, "");
|
||||
|
||||
wp_spa_json_parser_end (p);
|
||||
g_assert_false (wp_spa_json_parser_get_null (p));
|
||||
}
|
||||
|
|
@ -446,6 +455,30 @@ test_spa_json_object_builder_parser_iterator (void)
|
|||
g_value_unset (&next);
|
||||
}
|
||||
|
||||
{
|
||||
GValue next = G_VALUE_INIT;
|
||||
g_assert_true (wp_iterator_next (it, &next));
|
||||
WpSpaJson *j = g_value_get_boxed (&next);
|
||||
g_assert_nonnull (j);
|
||||
g_assert_true (wp_spa_json_is_string (j));
|
||||
g_autofree gchar *v = wp_spa_json_parse_string (j);
|
||||
g_assert_nonnull (v);
|
||||
g_assert_cmpstr (v, ==, "key-empty-string");
|
||||
g_value_unset (&next);
|
||||
}
|
||||
|
||||
{
|
||||
GValue next = G_VALUE_INIT;
|
||||
g_assert_true (wp_iterator_next (it, &next));
|
||||
WpSpaJson *j = g_value_get_boxed (&next);
|
||||
g_assert_nonnull (j);
|
||||
g_assert_true (wp_spa_json_is_string (j));
|
||||
g_autofree gchar *v = wp_spa_json_parse_string (j);
|
||||
g_assert_nonnull (v);
|
||||
g_assert_cmpstr (v, ==, "");
|
||||
g_value_unset (&next);
|
||||
}
|
||||
|
||||
g_assert_false (wp_iterator_next (it, NULL));
|
||||
wp_iterator_reset (it);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue