]> granicus.if.org Git - php/commitdiff
Interned strings must not be modified in-place
authorDmitry Stogov <dmitry@zend.com>
Wed, 7 May 2014 18:08:25 +0000 (22:08 +0400)
committerDmitry Stogov <dmitry@zend.com>
Wed, 7 May 2014 18:08:25 +0000 (22:08 +0400)
MAKE_COPY_ZVAL() should be changed into ZVAL_DUP()

ext/filter/filter.c
ext/filter/sanitizing_filters.c

index f77dcb3473932327d0a808a15c7b8af8dc4159d6..20ecbaa8c15f876031950985d9b8c668c4062ceb 100644 (file)
@@ -776,7 +776,7 @@ PHP_FUNCTION(filter_var)
                RETURN_FALSE;
        }
 
-       ZVAL_COPY(return_value, data);
+       ZVAL_DUP(return_value, data);
 
        php_filter_call(return_value, filter, filter_args, 1, FILTER_REQUIRE_SCALAR TSRMLS_CC);
 }
index 638288a1eb05bb5bf9b8a64ac3ee4c2f4d050b7e..c93633418f7741936c66c4c93d0957e548a06f92 100644 (file)
@@ -184,6 +184,10 @@ void php_filter_string(PHP_INPUT_FILTER_PARAM_DECL)
        size_t new_len;
        unsigned char enc[256] = {0};
 
+       if (IS_INTERNED(Z_STR_P(value))) {
+               ZVAL_STRINGL(value, Z_STRVAL_P(value), Z_STRLEN_P(value));
+       }
+
        /* strip high/strip low ( see flags )*/
        php_filter_strip(value, flags);