diff options
| author | Levi Morrison <levim@php.net> | 2015-09-02 18:23:26 -0600 |
|---|---|---|
| committer | Levi Morrison <levim@php.net> | 2015-09-02 18:23:26 -0600 |
| commit | 432dc527adcbc3bf4809f6315350300d42c16c52 (patch) | |
| tree | f62d83d360963bc8c54353c13ae88eba2c8ddea5 | |
| parent | 4388eba51012bc5eeab343fbfe1ad9e379230ccc (diff) | |
| download | php-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.c | 7 | ||||
| -rw-r--r-- | ext/filter/tests/bug67167.01.phpt | 16 | ||||
| -rw-r--r-- | ext/filter/tests/bug67167.02.phpt | 20 |
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 + |
