diff --git a/src/firewall/core/rich.py b/src/firewall/core/rich.py index dacaeb9..eb4a2d2 100644 --- a/src/firewall/core/rich.py +++ b/src/firewall/core/rich.py @@ -379,7 +379,10 @@ class Rich_Rule(object): raise FirewallError(errors.INVALID_RULE, "'family' attribute cannot have '%s' value. Use 'ipv4' or 'ipv6' instead." % attr_value) self.family = attr_value elif attr_name == 'priority': - self.priority = int(attr_value) + try: + self.priority = int(attr_value) + except ValueError: + raise FirewallError(errors.INVALID_RULE, "invalid 'priority' attribute value '%s'." % attr_value) elif attr_name: if attr_name == 'protocol': err_msg = "wrong 'protocol' usage. Use either 'rule protocol value=...' or 'rule [forward-]port protocol=...'." diff --git a/src/tests/regression/regression.at b/src/tests/regression/regression.at index 984d299..1c8f76a 100644 --- a/src/tests/regression/regression.at +++ b/src/tests/regression/regression.at @@ -30,3 +30,4 @@ m4_include([regression/gh330.at]) m4_include([regression/gh599.at]) m4_include([regression/rhbz1829104.at]) m4_include([regression/rhbz1843398.at]) +m4_include([regression/rhbz1689429.at]) diff --git a/src/tests/regression/rhbz1689429.at b/src/tests/regression/rhbz1689429.at new file mode 100644 index 0000000..5701607 --- /dev/null +++ b/src/tests/regression/rhbz1689429.at @@ -0,0 +1,12 @@ +FWD_START_TEST([rich rule invalid priority]) +AT_KEYWORDS(rich rhbz1689429) + +FWD_CHECK([--add-rich-rule='rule priority=foo accept'], 122, [], + [Error: INVALID_RULE: invalid 'priority' attribute value 'foo'. +]) +FWD_CHECK([--permanent --add-rich-rule='rule priority=foo accept'], 122, [], + [Error: INVALID_RULE: invalid 'priority' attribute value 'foo'. +]) +FWD_RELOAD + +FWD_END_TEST([ignore])