vpxenc: validate rational arguments
Trap negative values and zero denominators at the point where they're parsed. Change-Id: I1ec9da5d4e95d3ef539860883041330ecec2f345
This commit is contained in:
parent
dba053898a
commit
1b27e93cd1
21
vpxenc.c
21
vpxenc.c
@ -1542,6 +1542,23 @@ struct stream_state
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void validate_positive_rational(const char *msg,
|
||||||
|
struct vpx_rational *rat)
|
||||||
|
{
|
||||||
|
if (rat->den < 0)
|
||||||
|
{
|
||||||
|
rat->num *= -1;
|
||||||
|
rat->den *= -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rat->num < 0)
|
||||||
|
die("Error: %s must be positive\n", msg);
|
||||||
|
|
||||||
|
if (!rat->den)
|
||||||
|
die("Error: %s has zero denominator\n", msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void parse_global_config(struct global_config *global, char **argv)
|
static void parse_global_config(struct global_config *global, char **argv)
|
||||||
{
|
{
|
||||||
char **argi, **argj;
|
char **argi, **argj;
|
||||||
@ -1610,6 +1627,7 @@ static void parse_global_config(struct global_config *global, char **argv)
|
|||||||
else if (arg_match(&arg, &framerate, argi))
|
else if (arg_match(&arg, &framerate, argi))
|
||||||
{
|
{
|
||||||
global->framerate = arg_parse_rational(&arg);
|
global->framerate = arg_parse_rational(&arg);
|
||||||
|
validate_positive_rational(arg.name, &global->framerate);
|
||||||
global->have_framerate = 1;
|
global->have_framerate = 1;
|
||||||
}
|
}
|
||||||
else if (arg_match(&arg,&out_part, argi))
|
else if (arg_match(&arg,&out_part, argi))
|
||||||
@ -1807,7 +1825,10 @@ static int parse_stream_params(struct global_config *global,
|
|||||||
else if (arg_match(&arg, &stereo_mode, argi))
|
else if (arg_match(&arg, &stereo_mode, argi))
|
||||||
config->stereo_fmt = arg_parse_enum_or_int(&arg);
|
config->stereo_fmt = arg_parse_enum_or_int(&arg);
|
||||||
else if (arg_match(&arg, &timebase, argi))
|
else if (arg_match(&arg, &timebase, argi))
|
||||||
|
{
|
||||||
config->cfg.g_timebase = arg_parse_rational(&arg);
|
config->cfg.g_timebase = arg_parse_rational(&arg);
|
||||||
|
validate_positive_rational(arg.name, &config->cfg.g_timebase);
|
||||||
|
}
|
||||||
else if (arg_match(&arg, &error_resilient, argi))
|
else if (arg_match(&arg, &error_resilient, argi))
|
||||||
config->cfg.g_error_resilient = arg_parse_uint(&arg);
|
config->cfg.g_error_resilient = arg_parse_uint(&arg);
|
||||||
else if (arg_match(&arg, &lag_in_frames, argi))
|
else if (arg_match(&arg, &lag_in_frames, argi))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user