]> granicus.if.org Git - php/commitdiff
- #7586 (pecl), filter is not reseted between element
authorPierre Joye <pajoye@php.net>
Tue, 9 May 2006 11:14:43 +0000 (11:14 +0000)
committerPierre Joye <pajoye@php.net>
Tue, 9 May 2006 11:14:43 +0000 (11:14 +0000)
ext/filter/filter.c
ext/filter/tests/bug7586.phpt [new file with mode: 0644]

index 824c64219017d0f0b31ead794d1d29a6e5233a7d..6e805f61d6fedb8be6b2e68206411c210ccc825d 100644 (file)
@@ -495,7 +495,7 @@ PHP_FUNCTION(input_get)
        zval       *array_ptr = NULL, *array_ptr2 = NULL, *array_ptr3 = NULL;
        HashTable  *hash_ptr;
        int         found = 0;
-       int         filter_flags = 0;
+       long         filter_flags = 0;
        zval       *options = NULL;
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ls|lzs", &arg, &var, &var_len, &filter, &flags, &charset, &charset_len) == FAILURE) {
@@ -694,6 +694,14 @@ PHP_FUNCTION(input_get_args)
                        if (Z_TYPE_PP(element) != IS_ARRAY) {
                                convert_to_long(*element);
                                filter = Z_LVAL_PP(element);
+                               filter_flags = FILTER_FLAG_SCALAR;
+
+                               if ((filter_flags & FILTER_FLAG_SCALAR) && Z_TYPE_PP(tmp) == IS_ARRAY) {
+                                       /* asked for scalar and found an array do not test further */
+                                       add_assoc_bool(return_value, key, 0);
+                                       continue;
+                               }
+
                        } else {
                                if (zend_hash_find(HASH_OF(*element), "filter", sizeof("filter"), (void **)&option) == SUCCESS) {
                                        convert_to_long(*option);
@@ -722,7 +730,7 @@ PHP_FUNCTION(input_get_args)
                                        filter_flags = FILTER_FLAG_SCALAR;
                                }
 
-                               if (filter_flags & FILTER_FLAG_SCALAR && Z_TYPE_PP(tmp) == IS_ARRAY) {
+                               if ((filter_flags & FILTER_FLAG_SCALAR) && Z_TYPE_PP(tmp) == IS_ARRAY) {
                                        /* asked for scalar and found an array do not test further */
                                        add_assoc_bool(return_value, key, 0);
                                        continue;
@@ -756,7 +764,8 @@ PHP_FUNCTION(input_get_args)
                } else {
                        add_assoc_null(return_value, key);
                }
-               filter_flags = 0;
+               filter = FILTER_DEFAULT;
+               filter_flags = FILTER_FLAG_SCALAR;
        }
 }
 /* }}} */
diff --git a/ext/filter/tests/bug7586.phpt b/ext/filter/tests/bug7586.phpt
new file mode 100644 (file)
index 0000000..af4be33
--- /dev/null
@@ -0,0 +1,53 @@
+--TEST--
+input_get_args() filter not reseted between elements
+--FILE--
+<?php
+$data = array(
+    'product_id'    => 'libgd<script>',
+    'component'     => '10dhsajkkdhk <do>',
+    'versions'      => '2.0.33',
+    'testscalar'    => array('2','23','10','12'),
+    'testarray'     => '2',
+);
+
+$args = array(
+    'product_id'    => FILTER_SANITIZE_ENCODED,
+    'component'     => array('flags'    => FILTER_FLAG_ARRAY,
+                             'options'  => array("min_range"=>1, "max_range"=>10)
+                        ),
+    'versions'      => array(
+                            'filter' => FILTER_SANITIZE_ENCODED,
+                            'flags'  => FILTER_FLAG_SCALAR,
+                            ),
+    'doesnotexist'  => FILTER_VALIDATE_INT,
+    'testscalar'    => FILTER_VALIDATE_INT,
+    'testarray' => array(
+                            'filter' => FILTER_VALIDATE_INT,
+                            'flags'  => FILTER_FLAG_ARRAY,
+                        )
+
+);
+$out = input_get_args($args, INPUT_DATA, $data);
+var_dump($out);
+?>
+--EXPECTF--    
+array(6) {
+  ["product_id"]=>
+  string(17) "libgd%3Cscript%3E"
+  ["component"]=>
+  array(1) {
+    [0]=>
+    string(17) "%s"
+  }
+  ["versions"]=>
+  string(6) "2.0.33"
+  ["doesnotexist"]=>
+  NULL
+  ["testscalar"]=>
+  bool(false)
+  ["testarray"]=>
+  array(1) {
+    [0]=>
+    int(2)
+  }
+}