Our various deserializing functions require NULL terminators
to not over consume substrings (eg fields of an array). Instead
of writing a NULL terminator to the passed-in string, which may
result in segfaults, make a copy of the substring we're interested
in.
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/446
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/672>
if (G_UNLIKELY (!_priv_gst_value_parse_string (s, &value_end, &s, TRUE)))
return FALSE;
/* Set NULL terminator for deserialization */
- c = *value_end;
- *value_end = '\0';
+ value_s = g_strndup (value_s, value_end - value_s);
for (i = 0; i < G_N_ELEMENTS (try_types); i++) {
g_value_init (value, try_types[i]);
(type != G_TYPE_STRING))))
return FALSE;
/* Set NULL terminator for deserialization */
- c = *value_end;
- *value_end = '\0';
+ value_s = g_strndup (value_s, value_end - value_s);
ret = gst_value_deserialize_with_pspec (value, value_s, pspec);
if (G_UNLIKELY (!ret))
g_value_unset (value);
}
- *value_end = c;
+ g_free (value_s);
}
*after = s;