Skip to content

Commit 6fc2962

Browse files
committed
Merge branch 'PHP-5.4'
2 parents cdb9fe9 + a26390e commit 6fc2962

File tree

3 files changed

+45
-4
lines changed

3 files changed

+45
-4
lines changed

ext/filter/filter_private.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,14 @@
9999
} \
100100
return; \
101101

102-
#define PHP_FILTER_TRIM_DEFAULT(p, len) { \
102+
#define PHP_FILTER_TRIM_DEFAULT(p, len) PHP_FILTER_TRIM_DEFAULT_EX(p, len, 1);
103+
104+
#define PHP_FILTER_TRIM_DEFAULT_EX(p, len, return_if_empty) { \
103105
while ((len > 0) && (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\v' || *p == '\n')) { \
104106
p++; \
105107
len--; \
106108
} \
107-
if (len < 1) { \
109+
if (len < 1 && return_if_empty) { \
108110
RETURN_VALIDATION_FAILED \
109111
} \
110112
while (p[len-1] == ' ' || p[len-1] == '\t' || p[len-1] == '\r' || p[len-1] == '\v' || p[len-1] == '\n') { \

ext/filter/logical_filters.c

+5-2
Original file line numberDiff line numberDiff line change
@@ -235,12 +235,15 @@ void php_filter_boolean(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
235235
int len = Z_STRLEN_P(value);
236236
int ret;
237237

238-
PHP_FILTER_TRIM_DEFAULT(str, len);
238+
PHP_FILTER_TRIM_DEFAULT_EX(str, len, 0);
239239

240240
/* returns true for "1", "true", "on" and "yes"
241241
* returns false for "0", "false", "off", "no", and ""
242242
* null otherwise. */
243243
switch (len) {
244+
case 0:
245+
ret = 0;
246+
break;
244247
case 1:
245248
if (*str == '1') {
246249
ret = 1;
@@ -286,7 +289,7 @@ void php_filter_boolean(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
286289
ret = -1;
287290
}
288291

289-
if (ret == -1) {
292+
if (ret == -1) {
290293
RETURN_VALIDATION_FAILED
291294
} else {
292295
zval_dtor(value);

ext/filter/tests/bug49510.phpt

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
--TEST--
2+
#49510 boolean validation fails with FILTER_NULL_ON_FAILURE
3+
--FILE--
4+
<?php
5+
var_dump(filter_var(false, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
6+
var_dump(filter_var(0, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
7+
var_dump(filter_var("0", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
8+
var_dump(filter_var("off", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
9+
var_dump(filter_var("", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
10+
var_dump(filter_var("false", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
11+
var_dump(filter_var("no", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
12+
13+
var_dump(filter_var(true, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
14+
var_dump(filter_var(1, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
15+
var_dump(filter_var("1", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
16+
var_dump(filter_var("on", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
17+
var_dump(filter_var("yes", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
18+
19+
var_dump(filter_var("invalid", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
20+
?>
21+
==DONE==
22+
--EXPECT--
23+
bool(false)
24+
bool(false)
25+
bool(false)
26+
bool(false)
27+
bool(false)
28+
bool(false)
29+
bool(false)
30+
bool(true)
31+
bool(true)
32+
bool(true)
33+
bool(true)
34+
bool(true)
35+
NULL
36+
==DONE==

0 commit comments

Comments
 (0)