if (SCNG(output_filter)) {
size_t sz = 0;
char *str = NULL;
+ zend_string *new_str;
s = Z_STRVAL_P(zendlval);
// TODO: avoid reallocation ???
SCNG(output_filter)((unsigned char **)&str, &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval));
- ZVAL_STRINGL(zendlval, str, sz);
+ new_str = zend_string_init(str, sz, 0);
+ if (str != s) {
+ efree(str);
+ }
+ zend_string_release_ex(Z_STR_P(zendlval), 0);
+ ZVAL_STR(zendlval, new_str);
}
RETURN_TOKEN_WITH_VAL(T_CONSTANT_ENCAPSED_STRING);
}