diff options
author | John Koleszar <jkoleszar@google.com> | 2012-04-25 17:08:56 -0700 |
---|---|---|
committer | John Koleszar <jkoleszar@google.com> | 2012-04-25 17:11:05 -0700 |
commit | 1b27e93cd13ff60798e31634ddb362fa7aa9749d (patch) | |
tree | f5ecb1a0180087ccf7782557c4612aea4d5cb4ad /vpxenc.c | |
parent | dba053898a662923e8750021314e1e90d0b92f80 (diff) | |
download | libvpx-1b27e93cd13ff60798e31634ddb362fa7aa9749d.tar libvpx-1b27e93cd13ff60798e31634ddb362fa7aa9749d.tar.gz libvpx-1b27e93cd13ff60798e31634ddb362fa7aa9749d.tar.bz2 libvpx-1b27e93cd13ff60798e31634ddb362fa7aa9749d.zip |
vpxenc: validate rational arguments
Trap negative values and zero denominators at the point where they're
parsed.
Change-Id: I1ec9da5d4e95d3ef539860883041330ecec2f345
Diffstat (limited to 'vpxenc.c')
-rw-r--r-- | vpxenc.c | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -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) { 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)) { global->framerate = arg_parse_rational(&arg); + validate_positive_rational(arg.name, &global->framerate); global->have_framerate = 1; } 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)) config->stereo_fmt = arg_parse_enum_or_int(&arg); else if (arg_match(&arg, &timebase, argi)) + { 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)) config->cfg.g_error_resilient = arg_parse_uint(&arg); else if (arg_match(&arg, &lag_in_frames, argi)) |