History

vpxenc: validate rational arguments

Trap negative values and zero denominators at the point where they're parsed.

John Koleszar committed 14 years ago

Commit 1b27e931 parent dba05381 file · +21 −0Browse files

Unified · Split

vpxenc.c+21−0
@@ -1542,6 +1542,23 @@ struct stream_state · 1541 unmodified lines
15421542 };
15431543
15441544
1545+void validate_positive_rational(const char *msg,
1546+ struct vpx_rational *rat)
1547+{
1548+ if (rat->den < 0)
1549+ {
1550+ rat->num *= -1;
1551+ rat->den *= -1;
1552+ }
1553+
1554+ if (rat->num < 0)
1555+ die("Error: %s must be positive\n", msg);
1556+
1557+ if (!rat->den)
1558+ die("Error: %s has zero denominator\n", msg);
1559+}
1560+
1561+
15451562 static void parse_global_config(struct global_config *global, char **argv)
15461563 {
15471564 char **argi, **argj;
@@ -1610,6 +1627,7 @@ static void parse_global_config(struct global_config *global, char **argv) · 62 unmodified lines
16101627 else if (arg_match(&arg, &framerate, argi))
16111628 {
16121629 global->framerate = arg_parse_rational(&arg);
1630+ validate_positive_rational(arg.name, &global->framerate);
16131631 global->have_framerate = 1;
16141632 }
16151633 else if (arg_match(&arg,&out_part, argi))
@@ -1807,7 +1825,10 @@ static int parse_stream_params(struct global_config *global, · 191 unmodified lines
18071825 else if (arg_match(&arg, &stereo_mode, argi))
18081826 config->stereo_fmt = arg_parse_enum_or_int(&arg);
18091827 else if (arg_match(&arg, &timebase, argi))
1828+ {
18101829 config->cfg.g_timebase = arg_parse_rational(&arg);
1830+ validate_positive_rational(arg.name, &config->cfg.g_timebase);
1831+ }
18111832 else if (arg_match(&arg, &error_resilient, argi))
18121833 config->cfg.g_error_resilient = arg_parse_uint(&arg);
18131834 else if (arg_match(&arg, &lag_in_frames, argi))

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t