tony2001 Thu Sep 14 15:30:37 2006 UTC Modified files: /php-src/ext/filter filter.c Log: MFB http://cvs.php.net/viewvc.cgi/php-src/ext/filter/filter.c?r1=1.67&r2=1.68&diff_format=u Index: php-src/ext/filter/filter.c diff -u php-src/ext/filter/filter.c:1.67 php-src/ext/filter/filter.c:1.68 --- php-src/ext/filter/filter.c:1.67 Thu Aug 31 22:32:54 2006 +++ php-src/ext/filter/filter.c Thu Sep 14 15:30:37 2006 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: filter.c,v 1.67 2006/08/31 22:32:54 pajoye Exp $ */ +/* $Id: filter.c,v 1.68 2006/09/14 15:30:37 tony2001 Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -274,7 +274,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.67 $"); + php_info_print_table_row( 2, "Revision", "$Revision: 1.68 $"); php_info_print_table_end(); DISPLAY_INI_ENTRIES(); @@ -301,7 +301,7 @@ } /* }}} */ -static void php_zval_filter(zval **value, long filter, long flags, zval *options, char* charset TSRMLS_DC) /* {{{ */ +static void php_zval_filter(zval **value, long filter, long flags, zval *options, char* charset, zend_bool copy TSRMLS_DC) /* {{{ */ { filter_list_entry filter_func; @@ -312,7 +312,9 @@ filter_func = php_find_filter(FILTER_DEFAULT); } - SEPARATE_ZVAL(value); + if (copy) { + SEPARATE_ZVAL(value); + } /* Here be strings */ convert_to_string(*value); @@ -380,7 +382,7 @@ zval *tmp_new_var = &new_var; Z_STRVAL(new_var) = estrndup(*val, val_len); INIT_PZVAL(tmp_new_var); - php_zval_filter(&tmp_new_var, IF_G(default_filter), IF_G(default_filter_flags), NULL, NULL/*charset*/ TSRMLS_CC); + php_zval_filter(&tmp_new_var, IF_G(default_filter), IF_G(default_filter_flags), NULL, NULL/*charset*/, 0 TSRMLS_CC); } #if PHP_VERSION_ID<60000 else if (PG(magic_quotes_gpc)) { @@ -418,7 +420,7 @@ } /* }}} */ -static void php_zval_filter_recursive(zval **value, long filter, long flags, zval *options, char *charset TSRMLS_DC) /* {{{ */ +static void php_zval_filter_recursive(zval **value, long filter, long flags, zval *options, char *charset, zend_bool copy TSRMLS_DC) /* {{{ */ { zval **element; HashPosition pos; @@ -427,10 +429,10 @@ for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(value), &pos); zend_hash_get_current_data_ex(Z_ARRVAL_PP(value), (void **) &element, &pos) == SUCCESS; zend_hash_move_forward_ex(Z_ARRVAL_PP(value), &pos)) { - php_zval_filter_recursive(element, filter, flags, options, charset TSRMLS_CC); + php_zval_filter_recursive(element, filter, flags, options, charset, copy TSRMLS_CC); } } else { - php_zval_filter(value, filter, flags, options, charset TSRMLS_CC); + php_zval_filter(value, filter, flags, options, charset, copy TSRMLS_CC); } } /* }}} */ @@ -657,7 +659,7 @@ ZVAL_BOOL(return_value, 0); } - php_zval_filter_recursive(&return_value, filter, filter_flags, options, charset TSRMLS_CC); + php_zval_filter_recursive(&return_value, filter, filter_flags, options, charset, 1 TSRMLS_CC); } else { RETURN_NULL(); } @@ -686,6 +688,7 @@ char *key; unsigned int key_len; unsigned long index; + zend_bool copy = 0; /* pointers to the zval array GET, POST,... */ zval *array_ptr = NULL; @@ -713,6 +716,7 @@ case PARSE_DATA: array_ptr = values; + copy = 1; break; case PARSE_SESSION: @@ -804,7 +808,7 @@ } if (filter_flags & FILTER_FLAG_ARRAY) { - php_zval_filter_recursive(tmp, filter, filter_flags, options, charset TSRMLS_CC); + php_zval_filter_recursive(tmp, filter, filter_flags, options, charset, copy TSRMLS_CC); /* ARRAY always returns an array */ if (Z_TYPE_PP(tmp) != IS_ARRAY) { @@ -814,7 +818,7 @@ *tmp = temparray; } } else { - php_zval_filter(tmp, filter, filter_flags, options, charset TSRMLS_CC); + php_zval_filter(tmp, filter, filter_flags, options, charset, copy TSRMLS_CC); } zval_add_ref(tmp); add_assoc_zval(return_value, key, *tmp); @@ -908,7 +912,7 @@ } } } - php_zval_filter_recursive(&var, filter, filter_flags, options, charset TSRMLS_CC); + php_zval_filter_recursive(&var, filter, filter_flags, options, charset, 1 TSRMLS_CC); RETURN_ZVAL(var, 1, 0); } /* }}} */
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php