summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLevi Morrison <levim@php.net>2015-09-02 18:23:26 -0600
committerLevi Morrison <levim@php.net>2015-09-02 18:23:26 -0600
commit432dc527adcbc3bf4809f6315350300d42c16c52 (patch)
treef62d83d360963bc8c54353c13ae88eba2c8ddea5
parent4388eba51012bc5eeab343fbfe1ad9e379230ccc (diff)
downloadphp-git-432dc527adcbc3bf4809f6315350300d42c16c52.tar.gz
Partially fix bug #67167 - Wrong return value...
...from FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE The remainer of the fix would require the filter functions to only convert to string when it makes sense for that particular filter.
-rw-r--r--ext/filter/filter.c7
-rw-r--r--ext/filter/tests/bug67167.01.phpt16
-rw-r--r--ext/filter/tests/bug67167.02.phpt20
3 files changed, 42 insertions, 1 deletions
diff --git a/ext/filter/filter.c b/ext/filter/filter.c
index 6f8a7a5f8b..e29a36ab71 100644
--- a/ext/filter/filter.c
+++ b/ext/filter/filter.c
@@ -389,7 +389,12 @@ static void php_zval_filter(zval *value, zend_long filter, zend_long flags, zval
ce = Z_OBJCE_P(value);
if (!ce->__tostring) {
zval_ptr_dtor(value);
- ZVAL_FALSE(value);
+ /* #67167: doesn't return null on failure for objects */
+ if (flags & FILTER_NULL_ON_FAILURE) {
+ ZVAL_NULL(value);
+ } else {
+ ZVAL_FALSE(value);
+ }
return;
}
}
diff --git a/ext/filter/tests/bug67167.01.phpt b/ext/filter/tests/bug67167.01.phpt
new file mode 100644
index 0000000000..09e84fd053
--- /dev/null
+++ b/ext/filter/tests/bug67167.01.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug #67167: object with VALIDATE_BOOLEAN and NULL_ON_FAILURE
+
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+
+--FILE--
+<?php
+var_dump(filter_var(
+ new \StdClass(),
+ FILTER_VALIDATE_BOOLEAN,
+ FILTER_NULL_ON_FAILURE
+));
+
+--EXPECTF--
+NULL
diff --git a/ext/filter/tests/bug67167.02.phpt b/ext/filter/tests/bug67167.02.phpt
new file mode 100644
index 0000000000..3ab0990dd3
--- /dev/null
+++ b/ext/filter/tests/bug67167.02.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Bug #67167: filter_var(null,FILTER_VALIDATE_BOOLEAN,FILTER_NULL_ON_FAILURE) returns null
+
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+
+--FILE--
+<?php
+var_dump(filter_var(
+ null,
+ FILTER_VALIDATE_BOOLEAN,
+ FILTER_NULL_ON_FAILURE
+));
+
+--XFAIL--
+Requires php_zval_filter to not use convert_to_string for all filters.
+
+--EXPECTF--
+NULL
+