Skip to content

Commit 5ae8125

Browse files
Fix phpGH-16993: Fix filter_var_array to warn when validation filters are incorrectly combined with FILTER_NULL_ON_FAILURE flag (php#19660)
1 parent ae7def7 commit 5ae8125

File tree

4 files changed

+42
-0
lines changed

4 files changed

+42
-0
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ PHP NEWS
2828
- FPM:
2929
. Fixed failed debug assertion when php_admin_value setting fails. (ilutov)
3030

31+
- Filter:
32+
. Fixed bug GH-16993 (filter_var_array with FILTER_VALIDATE_INT|FILTER_NULL_ON_FAILURE
33+
should emit warning for invalid filter usage). (alexandre-daubois)
34+
3135
- Opcache:
3236
. Fixed bug GH-19486 (Incorrect opline after deoptimization). (Arnaud)
3337
. Fixed bug GH-19601 (Wrong JIT stack setup on aarch64/clang). (Arnaud)

ext/filter/filter.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,14 @@ static void php_filter_array_handler(zval *input, HashTable *op_ht, zend_long op
627627
zval nval;
628628
ZVAL_DEREF(tmp);
629629
ZVAL_DUP(&nval, tmp);
630+
631+
if (Z_TYPE_P(arg_elm) != IS_ARRAY) {
632+
zend_long filter_id = zval_get_long(arg_elm);
633+
if (!PHP_FILTER_ID_EXISTS(filter_id)) {
634+
php_error_docref(NULL, E_WARNING, "Unknown filter with ID " ZEND_LONG_FMT, filter_id);
635+
}
636+
}
637+
630638
php_filter_call(&nval, -1,
631639
Z_TYPE_P(arg_elm) == IS_ARRAY ? Z_ARRVAL_P(arg_elm) : NULL,
632640
Z_TYPE_P(arg_elm) == IS_ARRAY ? 0 : zval_get_long(arg_elm),

ext/filter/tests/039.phpt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,18 @@ array(1) {
125125
["var_name"]=>
126126
NULL
127127
}
128+
129+
Warning: filter_var_array(): Unknown filter with ID -1 in %s on line %d
128130
array(1) {
129131
["var_name"]=>
130132
string(0) ""
131133
}
132134
-- (5)
135+
136+
Warning: filter_var_array(): Unknown filter with ID -1 in %s on line %d
133137
filter_var_array(): Argument #2 ($options) cannot contain empty keys
138+
139+
Warning: filter_var_array(): Unknown filter with ID 0 in %s on line %d
134140
filter_var_array(): Argument #2 ($options) cannot contain empty keys
135141

136142
Warning: filter_var_array(): Unknown filter with ID -1 in %s on line %d

ext/filter/tests/gh16993.phpt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
--TEST--
2+
GH-16993: filter_var_array should emit warning for unknown filters
3+
--EXTENSIONS--
4+
filter
5+
--FILE--
6+
<?php
7+
$data = ['test' => '42'];
8+
9+
$result = filter_var_array($data, ['test' => FILTER_VALIDATE_INT|FILTER_NULL_ON_FAILURE]);
10+
var_dump($result);
11+
12+
$result = filter_var_array($data, ['test' => ['filter' => FILTER_VALIDATE_INT, 'flags' => FILTER_NULL_ON_FAILURE]]);
13+
var_dump($result);
14+
?>
15+
--EXPECTF--
16+
Warning: filter_var_array(): Unknown filter with ID 134217985 in %s on line %d
17+
array(1) {
18+
["test"]=>
19+
string(2) "42"
20+
}
21+
array(1) {
22+
["test"]=>
23+
int(42)
24+
}

0 commit comments

Comments
 (0)