]> granicus.if.org Git - php/commitdiff
Treat "+0" and "-0" as valid integers just like var_dump() does.
authorMartin Jansen <martin@divbyzero.net>
Mon, 24 Dec 2012 13:58:01 +0000 (14:58 +0100)
committerLars Strojny <lstrojny@php.net>
Sat, 29 Dec 2012 02:31:13 +0000 (03:31 +0100)
This fixes bug #54096.

ext/filter/logical_filters.c
ext/filter/tests/filter_data.phpt

index 4de6b83e00f4eb5f62545f16c0b3f3eac6b172b5..c03c698700714fd203817646abf9334e227cc1ef 100644 (file)
@@ -80,6 +80,11 @@ static int php_filter_parse_int(const char *str, unsigned int str_len, long *ret
                        break;
        }
 
+       if (*str == '0' && str + 1 == end) {
+               /* Special cases: +0 and -0 */
+               return 1;
+       }
+
        /* must start with 1..9*/
        if (str < end && *str >= '1' && *str <= '9') {
                ctx_value = ((sign)?-1:1) * ((*(str++)) - '0');
index 1071b3efae0abb9871e7f3d5c3bce1e26e5854d5..5e3b82a1fb78e2de7109ad8ebba45bb3801bc21a 100644 (file)
@@ -10,6 +10,8 @@ precision=14
 /* Integer */
 $data = "-123";   var_dump(filter_var($data, FILTER_VALIDATE_INT));
 $data = "0";      var_dump(filter_var($data, FILTER_VALIDATE_INT));
+$data = "-0";     var_dump(filter_var($data, FILTER_VALIDATE_INT));
+$data = "+0";     var_dump(filter_var($data, FILTER_VALIDATE_INT));
 $data = "123";    var_dump(filter_var($data, FILTER_VALIDATE_INT));
 $data = -123;     var_dump(filter_var($data, FILTER_VALIDATE_INT));
 $data = 0;        var_dump(filter_var($data, FILTER_VALIDATE_INT));
@@ -46,6 +48,8 @@ $data = "";       var_dump(filter_var($data, FILTER_VALIDATE_BOOLEAN));
 --EXPECT--
 int(-123)
 int(0)
+int(0)
+int(0)
 int(123)
 int(-123)
 int(0)