make isUnsignedInteger() unary
authorDenis Ovsienko <denis@ovsienko.info>
Fri, 18 May 2018 13:33:59 +0000 (14:33 +0100)
committerDenis Ovsienko <denis@ovsienko.info>
Fri, 18 May 2018 13:33:59 +0000 (14:33 +0100)
This gets rid of the default value and makes the code easier to read. The
function now treats zero is a valid value and any other function that
calls it expects exactly that. Remove the explicit 2nd argument from the
following functions:

* setConfigVar()
* setUserConfigVar()
* HTMLColorFromDatabase()
* sortTokenize()
* constructIPRange()
* updVSTRule()

Add two unary functions -- assertUnsignedIntArg() and
assertNaturalNumArg() -- and reduce assertUIntArg() to a wrapper.

Update the tests.

tests/PureFunctionTest.php
wwwroot/inc/database.php
wwwroot/inc/functions.php
wwwroot/inc/ophandlers.php

index 3e8ba83..b7f1734 100644 (file)
@@ -395,7 +395,7 @@ class PureFunctionTest extends RTTestCase
                        array ('isUnsignedInteger', -2, FALSE),
                        array ('isUnsignedInteger', -1.5, FALSE),
                        array ('isUnsignedInteger', -1, FALSE),
-                       array ('isUnsignedInteger', 0, FALSE), // implicit 2nd argument
+                       array ('isUnsignedInteger', 0, TRUE),
                        array ('isUnsignedInteger', 0.0, FALSE),
                        array ('isUnsignedInteger', 1, TRUE),
                        array ('isUnsignedInteger', 1.5, FALSE),
@@ -407,7 +407,7 @@ class PureFunctionTest extends RTTestCase
                        array ('isUnsignedInteger', '-2', FALSE),
                        array ('isUnsignedInteger', '-1.5', FALSE),
                        array ('isUnsignedInteger', '-1', FALSE),
-                       array ('isUnsignedInteger', '0', FALSE), // implicit 2nd argument
+                       array ('isUnsignedInteger', '0', TRUE),
                        array ('isUnsignedInteger', '0.0', FALSE),
                        array ('isUnsignedInteger', '1', TRUE),
                        array ('isUnsignedInteger', '1.5', FALSE),
@@ -1106,47 +1106,6 @@ class PureFunctionTest extends RTTestCase
                        array ('goodModeForVSTRole', 'trunk', 'uplink', TRUE),
                        array ('goodModeForVSTRole', 'trunk', 'downlink', TRUE),
 
-                       array ('isUnsignedInteger', -2, FALSE, FALSE),
-                       array ('isUnsignedInteger', -1.5, FALSE, FALSE),
-                       array ('isUnsignedInteger', -1, FALSE, FALSE),
-                       array ('isUnsignedInteger', 0, FALSE, FALSE), // explicit 2nd argument
-                       array ('isUnsignedInteger', 0.0, FALSE, FALSE),
-                       array ('isUnsignedInteger', 1, FALSE, TRUE),
-                       array ('isUnsignedInteger', 1.5, FALSE, FALSE),
-                       array ('isUnsignedInteger', 2, FALSE, TRUE),
-                       array ('isUnsignedInteger', NULL, FALSE, FALSE),
-                       array ('isUnsignedInteger', FALSE, FALSE, FALSE),
-                       array ('isUnsignedInteger', TRUE, FALSE, FALSE),
-                       array ('isUnsignedInteger', '', FALSE, FALSE),
-                       array ('isUnsignedInteger', '-2', FALSE, FALSE),
-                       array ('isUnsignedInteger', '-1.5', FALSE, FALSE),
-                       array ('isUnsignedInteger', '-1', FALSE, FALSE),
-                       array ('isUnsignedInteger', '0', FALSE, FALSE), // explicit 2nd argument
-                       array ('isUnsignedInteger', '0.0', FALSE, FALSE),
-                       array ('isUnsignedInteger', '1', FALSE, TRUE),
-                       array ('isUnsignedInteger', '1.5', FALSE, FALSE),
-                       array ('isUnsignedInteger', '2', FALSE, TRUE),
-                       array ('isUnsignedInteger', -2, TRUE, FALSE),
-                       array ('isUnsignedInteger', -1.5, TRUE, FALSE),
-                       array ('isUnsignedInteger', -1, TRUE, FALSE),
-                       array ('isUnsignedInteger', 0, TRUE, TRUE), // explicit 2nd argument
-                       array ('isUnsignedInteger', 0.0, TRUE, FALSE),
-                       array ('isUnsignedInteger', 1, TRUE, TRUE),
-                       array ('isUnsignedInteger', 1.5, TRUE, FALSE),
-                       array ('isUnsignedInteger', 2, TRUE, TRUE),
-                       array ('isUnsignedInteger', NULL, TRUE, FALSE),
-                       array ('isUnsignedInteger', FALSE, TRUE, FALSE),
-                       array ('isUnsignedInteger', TRUE, TRUE, FALSE),
-                       array ('isUnsignedInteger', '', TRUE, FALSE),
-                       array ('isUnsignedInteger', '-2', TRUE, FALSE),
-                       array ('isUnsignedInteger', '-1.5', TRUE, FALSE),
-                       array ('isUnsignedInteger', '-1', TRUE, FALSE),
-                       array ('isUnsignedInteger', '0', TRUE, TRUE), // explicit 2nd argument
-                       array ('isUnsignedInteger', '0.0', TRUE, FALSE),
-                       array ('isUnsignedInteger', '1', TRUE, TRUE),
-                       array ('isUnsignedInteger', '1.5', TRUE, FALSE),
-                       array ('isUnsignedInteger', '2', TRUE, TRUE),
-
                        // explicit 2nd argument
                        array ('colorHex2Rgb', '000000', FALSE, '0,0,0'),
                        array ('colorHex2Rgb', 'FFFFFF', FALSE, '255,255,255'),
index a330e01..55da7a4 100644 (file)
@@ -5740,7 +5740,7 @@ function setConfigVar ($varname, $varvalue)
                throw new InvalidArgException ('varname', $varname, 'a hidden variable cannot be changed');
        if ($varvalue == '' && $var['emptyok'] != 'yes')
                throw new InvalidArgException ('varvalue', $varvalue, "'${varname}' must have a non-empty value");
-       if ($varvalue != '' && $var['vartype'] == 'uint' && ! isUnsignedInteger ($varvalue, TRUE))
+       if ($varvalue != '' && $var['vartype'] == 'uint' && ! isUnsignedInteger ($varvalue))
                throw new InvalidArgException ('varvalue', $varvalue, "'${varname}' must be an unsigned integer");
        // Update cache only if the changes went into DB.
        usePreparedUpdateBlade ('Config', array ('varvalue' => $varvalue), array ('varname' => $varname));
@@ -5763,7 +5763,7 @@ function setUserConfigVar ($varname, $varvalue)
                throw new InvalidArgException ('varname', $varname, 'a hidden variable cannot be changed');
        if ($varvalue == '' && $var['emptyok'] != 'yes')
                throw new InvalidArgException ('varvalue', $varvalue, "'${varname}' must have a non-empty value");
-       if ($varvalue != '' && $var['vartype'] == 'uint' && ! isUnsignedInteger ($varvalue, TRUE))
+       if ($varvalue != '' && $var['vartype'] == 'uint' && ! isUnsignedInteger ($varvalue))
                throw new InvalidArgException ('varvalue', $varvalue, "'${varname}' must be an unsigned integer");
        // Update cache only if the changes went into DB.
        usePreparedExecuteBlade
index 27fb460..e1c0d8b 100644 (file)
@@ -174,15 +174,10 @@ function defineIfNotDefined ($constant, $value, $case_insensitive = FALSE)
                define ($constant, $value, $case_insensitive);
 }
 
-// This function assures that specified argument was passed
-// and is a number greater than zero.
+// For backward compatibility only, remove later.
 function assertUIntArg ($argname, $allow_zero = FALSE)
 {
-       if (!isset ($_REQUEST[$argname]))
-               throw new InvalidRequestArgException($argname, '', 'parameter is missing');
-       if (! isUnsignedInteger ($_REQUEST[$argname], $allow_zero))
-               throw new InvalidRequestArgException ($argname, $_REQUEST[$argname], 'parameter is not an unsigned integer' . ($allow_zero ? ' (or 0)' : ''));
-       return $_REQUEST[$argname];
+       return $allow_zero ? assertUnsignedIntArg ($argname) : assertNaturalNumArg ($argname);
 }
 
 // Tell whether the argument is a decimal integer (or, alternatively, a numeric
@@ -196,9 +191,9 @@ function isInteger ($arg)
                is_int (0 + $arg);
 }
 
-function isUnsignedInteger ($arg, $allow_zero = FALSE)
+function isUnsignedInteger ($arg)
 {
-       return isInteger ($arg) && $arg >= ($allow_zero ? 0 : 1);
+       return isInteger ($arg) && $arg >= 0;
 }
 
 function isNaturalNumber ($arg)
@@ -216,6 +211,24 @@ function isValidVLANID ($x)
        return isInteger ($x) && $x >= VLAN_MIN_ID && $x <= VLAN_MAX_ID;
 }
 
+function assertUnsignedIntArg ($argname)
+{
+       if (! isset ($_REQUEST[$argname]))
+               throw new InvalidRequestArgException ($argname, '', 'parameter is missing');
+       if (! isUnsignedInteger ($_REQUEST[$argname]))
+               throw new InvalidRequestArgException ($argname, $_REQUEST[$argname], 'parameter is not an unsigned integer (or 0)');
+       return $_REQUEST[$argname];
+}
+
+function assertNaturalNumArg ($argname)
+{
+       if (! isset ($_REQUEST[$argname]))
+               throw new InvalidRequestArgException ($argname, '', 'parameter is missing');
+       if (! isNaturalNumber ($_REQUEST[$argname]))
+               throw new InvalidRequestArgException ($argname, $_REQUEST[$argname], 'parameter is not a natural number');
+       return $_REQUEST[$argname];
+}
+
 # Make sure the arg is a parsable date, return its UNIX timestamp equivalent
 # (or empty string for empty input, when allowed).
 #
@@ -1062,7 +1075,7 @@ function HTMLColorFromDatabase ($u)
 {
        if ($u === NULL)
                return NULL;
-       if (! isUnsignedInteger ($u, TRUE))
+       if (! isUnsignedInteger ($u))
                throw new InvalidArgException ('u', $u, 'not an unsigned integer');
        if ($u > 0xFFFFFF)
                throw new InvalidArgException ('u', $u, 'value out of range');
@@ -1142,7 +1155,7 @@ function sortTokenize ($a, $b)
        $brc = count ($br);
        for ($i = 0; $i < $arc && $i < $brc; $i++)
        {
-               if (isUnsignedInteger ($ar[$i], TRUE) && isUnsignedInteger ($br[$i], TRUE))
+               if (isUnsignedInteger ($ar[$i]) && isUnsignedInteger ($br[$i]))
                        $ret = numCompare ($ar[$i], $br[$i]);
                else
                        $ret = strcasecmp($ar[$i], $br[$i]);
@@ -2703,7 +2716,7 @@ function constructIPRange ($ip_bin, $mask = NULL)
                case 4: // IPv4
                        if ($mask === NULL)
                                $mask = 32;
-                       elseif (! isUnsignedInteger ($mask, TRUE) || $mask > 32)
+                       elseif (! isUnsignedInteger ($mask) || $mask > 32)
                                throw new InvalidArgException ('mask', $mask, "Invalid v4 prefix length");
                        $node['mask_bin'] = ip4_mask ($mask);
                        $node['mask'] = $mask;
@@ -2713,7 +2726,7 @@ function constructIPRange ($ip_bin, $mask = NULL)
                case 16: // IPv6
                        if ($mask === NULL)
                                $mask = 128;
-                       elseif (! isUnsignedInteger ($mask, TRUE) || $mask > 128)
+                       elseif (! isUnsignedInteger ($mask) || $mask > 128)
                                throw new InvalidArgException ('mask', $mask, "Invalid v6 prefix length");
                        $node['mask_bin'] = ip6_mask ($mask);
                        $node['mask'] = $mask;
index ed08624..a9c654b 100644 (file)
@@ -3062,7 +3062,7 @@ function updVSTRule()
                        $rule_no++;
                        if
                        (
-                               ! isUnsignedInteger (updVSTRule_get_named_param ('rule_no', $rule, $last_field), TRUE) ||
+                               ! isUnsignedInteger (updVSTRule_get_named_param ('rule_no', $rule, $last_field)) ||
                                ! isPCRE (updVSTRule_get_named_param ('port_pcre', $rule, $last_field)) ||
                                NULL === updVSTRule_get_named_param ('port_role', $rule, $last_field) ||
                                ! array_key_exists (updVSTRule_get_named_param ('port_role', $rule, $last_field), $port_role_options) ||