pajoye Tue Dec 5 01:24:18 2006 UTC
Modified files: (Branch: PHP_5_2)
/php-src/ext/filter filter.c filter_private.h
/php-src/ext/filter/tests 010.phpt 039.phpt
Log:
- MFH: invalid filter id should not return unsafe values
http://cvs.php.net/viewvc.cgi/php-src/ext/filter/filter.c?r1=1.52.2.31&r2=1.52.2.32&diff_format=u
Index: php-src/ext/filter/filter.c
diff -u php-src/ext/filter/filter.c:1.52.2.31
php-src/ext/filter/filter.c:1.52.2.32
--- php-src/ext/filter/filter.c:1.52.2.31 Mon Dec 4 21:16:01 2006
+++ php-src/ext/filter/filter.c Tue Dec 5 01:24:18 2006
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: filter.c,v 1.52.2.31 2006/12/04 21:16:01 pajoye Exp $ */
+/* $Id: filter.c,v 1.52.2.32 2006/12/05 01:24:18 pajoye Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -275,7 +275,7 @@
{
php_info_print_table_start();
php_info_print_table_row( 2, "Input Validation and Filtering",
"enabled" );
- php_info_print_table_row( 2, "Revision", "$Revision: 1.52.2.31 $");
+ php_info_print_table_row( 2, "Revision", "$Revision: 1.52.2.32 $");
php_info_print_table_end();
DISPLAY_INI_ENTRIES();
@@ -645,6 +645,11 @@
zval_dtor(return_value);
RETURN_FALSE;
}
+ if (arg_key_len < 2) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Empty keys are not allowed in the definition array");
+ zval_dtor(return_value);
+ RETURN_FALSE;
+ }
if (zend_hash_find(Z_ARRVAL_P(input), arg_key,
arg_key_len, (void **)&tmp) != SUCCESS) {
add_assoc_null_ex(return_value, arg_key,
arg_key_len);
} else {
@@ -680,6 +685,10 @@
return;
}
+ if (!PHP_FILTER_ID_EXISTS(filter)) {
+ RETURN_FALSE;
+ }
+
input = php_filter_get_storage(fetch_from TSRMLS_CC);
if (!input || !HASH_OF(input) || zend_hash_find(HASH_OF(input), var,
var_len + 1, (void **)&tmp) != SUCCESS) {
@@ -726,6 +735,10 @@
return;
}
+ if (!PHP_FILTER_ID_EXISTS(filter)) {
+ RETURN_FALSE;
+ }
+
*return_value = *data;
zval_copy_ctor(data);
@@ -745,6 +758,11 @@
return;
}
+ if (op && ( (Z_TYPE_PP(op) == IS_LONG &&
!PHP_FILTER_ID_EXISTS(Z_LVAL_PP(op)))
+ || Z_TYPE_PP(op) != IS_ARRAY)) {
+ RETURN_FALSE;
+ }
+
array_input = php_filter_get_storage(fetch_from TSRMLS_CC);
if (!array_input || !HASH_OF(array_input)) {
@@ -780,6 +798,11 @@
return;
}
+ if (op && ( (Z_TYPE_PP(op) == IS_LONG &&
!PHP_FILTER_ID_EXISTS(Z_LVAL_PP(op)))
+ || Z_TYPE_PP(op) != IS_ARRAY)) {
+ RETURN_FALSE;
+ }
+
php_filter_array_handler(array_input, op, return_value TSRMLS_CC);
}
/* }}} */
http://cvs.php.net/viewvc.cgi/php-src/ext/filter/filter_private.h?r1=1.12.2.5&r2=1.12.2.6&diff_format=u
Index: php-src/ext/filter/filter_private.h
diff -u php-src/ext/filter/filter_private.h:1.12.2.5
php-src/ext/filter/filter_private.h:1.12.2.6
--- php-src/ext/filter/filter_private.h:1.12.2.5 Tue Oct 17 15:26:14 2006
+++ php-src/ext/filter/filter_private.h Tue Dec 5 01:24:18 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: filter_private.h,v 1.12.2.5 2006/10/17 15:26:14 iliaa Exp $ */
+/* $Id: filter_private.h,v 1.12.2.6 2006/12/05 01:24:18 pajoye Exp $ */
#ifndef FILTER_PRIVATE_H
#define FILTER_PRIVATE_H
@@ -62,6 +62,7 @@
#define FILTER_VALIDATE_URL 0x0111
#define FILTER_VALIDATE_EMAIL 0x0112
#define FILTER_VALIDATE_IP 0x0113
+#define FILTER_VALIDATE_LAST 0x0113
#define FILTER_VALIDATE_ALL 0x0100
@@ -76,11 +77,17 @@
#define FILTER_SANITIZE_NUMBER_INT 0x0207
#define FILTER_SANITIZE_NUMBER_FLOAT 0x0208
#define FILTER_SANITIZE_MAGIC_QUOTES 0x0209
+#define FILTER_SANITIZE_LAST 0x0209
#define FILTER_SANITIZE_ALL 0x0200
#define FILTER_CALLBACK 0x0400
+#define PHP_FILTER_ID_EXISTS(id) \
+((id >= FILTER_SANITIZE_ALL && id <= FILTER_SANITIZE_LAST) \
+|| (id >= FILTER_VALIDATE_ALL && id <= FILTER_VALIDATE_LAST) \
+|| id == FILTER_CALLBACK)
+
#define PHP_FILTER_TRIM_DEFAULT(p, len, end) { \
while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\v') { \
p++; \
http://cvs.php.net/viewvc.cgi/php-src/ext/filter/tests/010.phpt?r1=1.4.2.5&r2=1.4.2.6&diff_format=u
Index: php-src/ext/filter/tests/010.phpt
diff -u php-src/ext/filter/tests/010.phpt:1.4.2.5
php-src/ext/filter/tests/010.phpt:1.4.2.6
--- php-src/ext/filter/tests/010.phpt:1.4.2.5 Tue Oct 17 22:05:16 2006
+++ php-src/ext/filter/tests/010.phpt Tue Dec 5 01:24:18 2006
@@ -55,6 +55,6 @@
string(1) "1"
string(1) "1"
string(1) "1"
-string(1) "1"
-string(1) "1"
+bool(false)
+bool(false)
Done
http://cvs.php.net/viewvc.cgi/php-src/ext/filter/tests/039.phpt?r1=1.1.2.3&r2=1.1.2.4&diff_format=u
Index: php-src/ext/filter/tests/039.phpt
diff -u php-src/ext/filter/tests/039.phpt:1.1.2.3
php-src/ext/filter/tests/039.phpt:1.1.2.4
--- php-src/ext/filter/tests/039.phpt:1.1.2.3 Mon Nov 13 19:32:58 2006
+++ php-src/ext/filter/tests/039.phpt Tue Dec 5 01:24:18 2006
@@ -5,6 +5,7 @@
--FILE--
<?php
+echo "-- (1)\n";
var_dump(filter_var_array(NULL));
var_dump(filter_var_array(array()));
var_dump(filter_var_array(array(1,"blah"=>"hoho")));
@@ -12,19 +13,24 @@
var_dump(filter_var_array(array(), 1000000));
var_dump(filter_var_array(array(), ""));
+echo "-- (2)\n";
var_dump(filter_var_array(array(""=>""), -1));
var_dump(filter_var_array(array(""=>""), 1000000));
var_dump(filter_var_array(array(""=>""), ""));
+echo "-- (3)\n";
var_dump(filter_var_array(array("aaa"=>"bbb"), -1));
var_dump(filter_var_array(array("aaa"=>"bbb"), 1000000));
var_dump(filter_var_array(array("aaa"=>"bbb"), ""));
+echo "-- (4)\n";
var_dump(filter_var_array(array(), new stdclass));
var_dump(filter_var_array(array(), array()));
var_dump(filter_var_array(array(), array("var_name"=>1)));
var_dump(filter_var_array(array(), array("var_name"=>-1)));
var_dump(filter_var_array(array("var_name"=>""), array("var_name"=>-1)));
+
+echo "-- (5)\n";
var_dump(filter_var_array(array("var_name"=>""), array("var_name"=>-1,
"asdas"=>"asdasd", "qwe"=>"rty", ""=>"")));
var_dump(filter_var_array(array("asdas"=>"text"), array("var_name"=>-1,
"asdas"=>"asdasd", "qwe"=>"rty", ""=>"")));
@@ -44,6 +50,8 @@
echo "Done\n";
?>
--EXPECTF--
+-- (1)
+
Warning: filter_var_array() expects parameter 1 to be array, null given in %s
on line %d
NULL
array(0) {
@@ -54,30 +62,19 @@
["blah"]=>
string(4) "hoho"
}
-array(0) {
-}
-array(0) {
-}
bool(false)
-array(1) {
- [""]=>
- string(0) ""
-}
-array(1) {
- [""]=>
- string(0) ""
-}
bool(false)
-array(1) {
- ["aaa"]=>
- string(3) "bbb"
-}
-array(1) {
- ["aaa"]=>
- string(3) "bbb"
-}
+bool(false)
+-- (2)
+bool(false)
bool(false)
bool(false)
+-- (3)
+bool(false)
+bool(false)
+bool(false)
+-- (4)
+bool(false)
array(0) {
}
array(1) {
@@ -92,39 +89,20 @@
["var_name"]=>
string(0) ""
}
-array(4) {
- ["var_name"]=>
- string(0) ""
- ["asdas"]=>
- NULL
- ["qwe"]=>
- NULL
- [""]=>
- NULL
-}
-array(4) {
- ["var_name"]=>
- NULL
- ["asdas"]=>
- string(4) "text"
- ["qwe"]=>
- NULL
- [""]=>
- NULL
-}
-array(1) {
- [""]=>
- string(0) ""
-}
+-- (5)
+
+Warning: filter_var_array(): Empty keys are not allowed in the definition
array in %s on line %d
+bool(false)
+
+Warning: filter_var_array(): Empty keys are not allowed in the definition
array in %s on line %d
+bool(false)
+bool(false)
array(1) {
[""]=>
string(0) ""
}
int(-1)
-array(1) {
- [""]=>
- string(0) ""
-}
+bool(false)
array(1) {
[""]=>
string(0) ""
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php