mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 19:55:32 +00:00
rtsptranport: ensure valid int result when parsing ranges
Specifically, make sure that the return value of strtol is falling in between the range of G_MININT and G_MAXINT. Fixes #646952.
This commit is contained in:
parent
3fa0119dc1
commit
fecd4a1154
1 changed files with 18 additions and 6 deletions
|
@ -269,6 +269,20 @@ parse_mode (GstRTSPTransport * transport, const gchar * str)
|
||||||
transport->mode_record = (strstr (str, "record") != NULL);
|
transport->mode_record = (strstr (str, "record") != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
check_range (const gchar * str, gchar ** tmp, gint * range)
|
||||||
|
{
|
||||||
|
glong range_val;
|
||||||
|
|
||||||
|
range_val = strtol (str, tmp, 10);
|
||||||
|
if (range_val >= G_MININT && range_val <= G_MAXINT) {
|
||||||
|
*range = range_val;
|
||||||
|
return TRUE;
|
||||||
|
} else {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
parse_range (const gchar * str, GstRTSPRange * range)
|
parse_range (const gchar * str, GstRTSPRange * range)
|
||||||
{
|
{
|
||||||
|
@ -286,16 +300,14 @@ parse_range (const gchar * str, GstRTSPRange * range)
|
||||||
if (g_ascii_isspace (minus[1]) || minus[1] == '+' || minus[1] == '-')
|
if (g_ascii_isspace (minus[1]) || minus[1] == '+' || minus[1] == '-')
|
||||||
goto invalid_range;
|
goto invalid_range;
|
||||||
|
|
||||||
range->min = strtol (str, &tmp, 10);
|
if (!check_range (str, &tmp, &range->min) || str == tmp || tmp != minus)
|
||||||
if (str == tmp || tmp != minus)
|
|
||||||
goto invalid_range;
|
goto invalid_range;
|
||||||
|
|
||||||
range->max = strtol (minus + 1, &tmp, 10);
|
if (!check_range (minus + 1, &tmp, &range->max) || (*tmp && *tmp != ';'))
|
||||||
if (*tmp && *tmp != ';')
|
|
||||||
goto invalid_range;
|
goto invalid_range;
|
||||||
} else {
|
} else {
|
||||||
range->min = strtol (str, &tmp, 10);
|
if (!check_range (str, &tmp, &range->min) || str == tmp ||
|
||||||
if (str == tmp || (*tmp && *tmp != ';'))
|
(*tmp && *tmp != ';'))
|
||||||
goto invalid_range;
|
goto invalid_range;
|
||||||
|
|
||||||
range->max = -1;
|
range->max = -1;
|
||||||
|
|
Loading…
Reference in a new issue