mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 14:26:43 +00:00
caps: Fail when fractions are followed by random text
Previous code treated "1/1yourmom" the same as "1/1" and "1wimsmom" the same as "1". Now the code is stricter and will fail to convert a fraction when followed by garbage text.
This commit is contained in:
parent
b74d73980b
commit
ec10b764b9
1 changed files with 9 additions and 7 deletions
|
@ -3685,6 +3685,7 @@ static gboolean
|
||||||
gst_value_deserialize_fraction (GValue * dest, const gchar * s)
|
gst_value_deserialize_fraction (GValue * dest, const gchar * s)
|
||||||
{
|
{
|
||||||
gint num, den;
|
gint num, den;
|
||||||
|
int num_chars;
|
||||||
|
|
||||||
if (G_UNLIKELY (s == NULL))
|
if (G_UNLIKELY (s == NULL))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -3692,19 +3693,20 @@ gst_value_deserialize_fraction (GValue * dest, const gchar * s)
|
||||||
if (G_UNLIKELY (dest == NULL || !GST_VALUE_HOLDS_FRACTION (dest)))
|
if (G_UNLIKELY (dest == NULL || !GST_VALUE_HOLDS_FRACTION (dest)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (sscanf (s, "%d/%d", &num, &den) == 2) {
|
if (sscanf (s, "%d/%d%n", &num, &den, &num_chars) >= 2) {
|
||||||
|
if (s[num_chars] != 0)
|
||||||
|
return FALSE;
|
||||||
gst_value_set_fraction (dest, num, den);
|
gst_value_set_fraction (dest, num, den);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
} else if (g_ascii_strcasecmp (s, "1/max") == 0) {
|
||||||
if (g_ascii_strcasecmp (s, "1/max") == 0) {
|
|
||||||
gst_value_set_fraction (dest, 1, G_MAXINT);
|
gst_value_set_fraction (dest, 1, G_MAXINT);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
} else if (sscanf (s, "%d%n", &num, &num_chars) >= 1) {
|
||||||
if (sscanf (s, "%d", &num) == 1) {
|
if (s[num_chars] != 0)
|
||||||
|
return FALSE;
|
||||||
gst_value_set_fraction (dest, num, 1);
|
gst_value_set_fraction (dest, num, 1);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
} else if (g_ascii_strcasecmp (s, "min") == 0) {
|
||||||
if (g_ascii_strcasecmp (s, "min") == 0) {
|
|
||||||
gst_value_set_fraction (dest, -G_MAXINT, 1);
|
gst_value_set_fraction (dest, -G_MAXINT, 1);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
} else if (g_ascii_strcasecmp (s, "max") == 0) {
|
} else if (g_ascii_strcasecmp (s, "max") == 0) {
|
||||||
|
|
Loading…
Reference in a new issue