Skip to content

Commit 3990641

Browse files
mjlstrojny
authored andcommitted
Treat "+0" and "-0" as valid integers just like var_dump() does.
This fixes bug #54096.
1 parent ac3d227 commit 3990641

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

ext/filter/logical_filters.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@ static int php_filter_parse_int(const char *str, unsigned int str_len, long *ret
8080
break;
8181
}
8282

83+
if (*str == '0' && str + 1 == end) {
84+
/* Special cases: +0 and -0 */
85+
return 1;
86+
}
87+
8388
/* must start with 1..9*/
8489
if (str < end && *str >= '1' && *str <= '9') {
8590
ctx_value = ((sign)?-1:1) * ((*(str++)) - '0');

ext/filter/tests/filter_data.phpt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ precision=14
1010
/* Integer */
1111
$data = "-123"; var_dump(filter_var($data, FILTER_VALIDATE_INT));
1212
$data = "0"; var_dump(filter_var($data, FILTER_VALIDATE_INT));
13+
$data = "-0"; var_dump(filter_var($data, FILTER_VALIDATE_INT));
14+
$data = "+0"; var_dump(filter_var($data, FILTER_VALIDATE_INT));
1315
$data = "123"; var_dump(filter_var($data, FILTER_VALIDATE_INT));
1416
$data = -123; var_dump(filter_var($data, FILTER_VALIDATE_INT));
1517
$data = 0; var_dump(filter_var($data, FILTER_VALIDATE_INT));
@@ -46,6 +48,8 @@ $data = ""; var_dump(filter_var($data, FILTER_VALIDATE_BOOLEAN));
4648
--EXPECT--
4749
int(-123)
4850
int(0)
51+
int(0)
52+
int(0)
4953
int(123)
5054
int(-123)
5155
int(0)

0 commit comments

Comments
 (0)