Index: ext/filter/filter.c =================================================================== RCS file: /repository/php-src/ext/filter/filter.c,v retrieving revision 1.52.2.44 diff -u -r1.52.2.44 ext/filter/filter.c --- ext/filter/filter.c 6 Dec 2008 17:16:36 -0000 1.52.2.44 +++ ext/filter/filter.c 6 Dec 2008 17:29:46 -0000 @@ -403,11 +403,16 @@ Z_STRLEN(new_var) = val_len; Z_TYPE(new_var) = IS_STRING; - if (IF_G(default_filter) != FILTER_UNSAFE_RAW) { + if (IF_G(default_filter) != FILTER_UNSAFE_RAW || IF_G(default_filter_flags) != 0) { 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*/, 0 TSRMLS_CC); + + /* apply magic_quotes_gpc if we only applied filter_flags and have no default_filter */ + if ((IF_G(default_filter) == FILTER_UNSAFE_RAW) && (PG(magic_quotes_gpc))) { + Z_STRVAL(new_var) = php_addslashes(Z_STRVAL(new_var), Z_STRLEN(new_var), &Z_STRLEN(new_var), 1 TSRMLS_CC); + } } else if (PG(magic_quotes_gpc) && !retval) { /* for PARSE_STRING php_register_variable_safe() will do the addslashes() */ Z_STRVAL(new_var) = php_addslashes(*val, Z_STRLEN(new_var), &Z_STRLEN(new_var), 0 TSRMLS_CC); } else {