diff --git a/Shorewall/Perl/Shorewall/Config.pm b/Shorewall/Perl/Shorewall/Config.pm index 130051d0e..c8792e6fc 100644 --- a/Shorewall/Perl/Shorewall/Config.pm +++ b/Shorewall/Perl/Shorewall/Config.pm @@ -735,11 +735,13 @@ sub assert( $ ) { # Convert value to decimal number # sub numeric_value ( $ ) { - no warnings; my $mark = lc $_[0]; - return undef unless $mark =~ /^-?(0x[a-f0-9]+|0[0-7]*|[1-9]\d*)$/; - $mark =~ /^0/ ? oct $mark : $mark; + my $negative = ( $mark =~ s/^-// ); + return undef unless $mark =~ /^(0x[a-f0-9]+|0[0-7]*|[1-9]\d*)$/; + no warnings; + $mark = ( $mark =~ /^0/ ? oct $mark : $mark ); use warnings; + $negative ? - $mark : $mark; } sub numeric_value1 ( $ ) { diff --git a/Shorewall/Perl/Shorewall/Tc.pm b/Shorewall/Perl/Shorewall/Tc.pm index beb96bb81..867bada9e 100644 --- a/Shorewall/Perl/Shorewall/Tc.pm +++ b/Shorewall/Perl/Shorewall/Tc.pm @@ -316,14 +316,12 @@ sub process_tc_rule( $$$$$$$$$$$$ ) { if ( defined $m1 && $m1 ne '' ) { $val = numeric_value ($m1); - fatal_error "Invalid Mask ($m1)" if $m1 =~ /^-0x/; fatal_error "Invalid Mask ($m1)" unless defined $val && $val && $val <= 0xffffffff; $mask1 = $m1; } if ( defined $m2 && $m2 ne '' ) { $val = numeric_value ($m2); - fatal_error "Invalid Mask ($m2)" if $m2 =~ /^-0x/; fatal_error "Invalid Mask ($m2)" unless defined $val && $val <= 0xffffffff; $mask2 = $m2; }