From 21b5ffb933ff4f286cb49695c4bd36e5d62d7e09 Mon Sep 17 00:00:00 2001 From: Martin Jansen Date: Mon, 24 Dec 2012 14:58:01 +0100 Subject: [PATCH 1/2] Treat "+0" and "-0" as valid integers just like var_dump() does. This fixes bug #54096. --- ext/filter/logical_filters.c | 5 +++++ ext/filter/tests/filter_data.phpt | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/ext/filter/logical_filters.c b/ext/filter/logical_filters.c index 4de6b83e00f4e..c03c698700714 100644 --- a/ext/filter/logical_filters.c +++ b/ext/filter/logical_filters.c @@ -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'); diff --git a/ext/filter/tests/filter_data.phpt b/ext/filter/tests/filter_data.phpt index 1071b3efae0ab..5e3b82a1fb78e 100644 --- a/ext/filter/tests/filter_data.phpt +++ b/ext/filter/tests/filter_data.phpt @@ -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) From 5e3e09b78657d7b79e1ed7d1f2c9b1cd26c54a71 Mon Sep 17 00:00:00 2001 From: Martin Jansen Date: Wed, 26 Dec 2012 11:51:55 +0100 Subject: [PATCH 2/2] Add more tests for the new +0/-0 behaviour. --- ext/filter/tests/filter_data.phpt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ext/filter/tests/filter_data.phpt b/ext/filter/tests/filter_data.phpt index 5e3b82a1fb78e..f83d98625c875 100644 --- a/ext/filter/tests/filter_data.phpt +++ b/ext/filter/tests/filter_data.phpt @@ -15,6 +15,8 @@ $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)); +$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 = ""; var_dump(filter_var($data, FILTER_VALIDATE_INT)); echo "\n"; @@ -53,6 +55,8 @@ int(0) int(123) int(-123) int(0) +int(0) +int(0) int(123) bool(false)