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
1542};1542};
1543 1543
1544 1544
1545void 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
1545static void parse_global_config(struct global_config *global, char **argv)1562static void parse_global_config(struct global_config *global, char **argv)
1546{1563{
1547 char **argi, **argj;1564 char **argi, **argj;
@@ -1610,6 +1627,7 @@ static void parse_global_config(struct global_config *global, char **argv) · 62 unmodified lines
1610 else if (arg_match(&arg, &framerate, argi))1627 else if (arg_match(&arg, &framerate, argi))
1611 {1628 {
1612 global->framerate = arg_parse_rational(&arg);1629 global->framerate = arg_parse_rational(&arg);
1630 validate_positive_rational(arg.name, &global->framerate);
1613 global->have_framerate = 1;1631 global->have_framerate = 1;
1614 }1632 }
1615 else if (arg_match(&arg,&out_part, argi))1633 else if (arg_match(&arg,&out_part, argi))
@@ -1807,7 +1825,10 @@ static int parse_stream_params(struct global_config *global, · 191 unmodified lines
1807 else if (arg_match(&arg, &stereo_mode, argi))1825 else if (arg_match(&arg, &stereo_mode, argi))
1808 config->stereo_fmt = arg_parse_enum_or_int(&arg);1826 config->stereo_fmt = arg_parse_enum_or_int(&arg);
1809 else if (arg_match(&arg, &timebase, argi))1827 else if (arg_match(&arg, &timebase, argi))
1828 {
1810 config->cfg.g_timebase = arg_parse_rational(&arg);1829 config->cfg.g_timebase = arg_parse_rational(&arg);
1830 validate_positive_rational(arg.name, &config->cfg.g_timebase);
1831 }
1811 else if (arg_match(&arg, &error_resilient, argi))1832 else if (arg_match(&arg, &error_resilient, argi))
1812 config->cfg.g_error_resilient = arg_parse_uint(&arg);1833 config->cfg.g_error_resilient = arg_parse_uint(&arg);
1813 else if (arg_match(&arg, &lag_in_frames, argi))1834 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