php_stripcslashes(Z_STR_P(zv));
}
-static inline void quote_string(zend_string **zs, zend_bool force)
+static inline zend_string *quote_string(zend_string *zs, zend_bool force)
{
- int len = (*zs)->len;
+ size_t len = (zs)->len;
- *zs = php_addcslashes(*zs, 1, ZEND_STRL("\0..\37\173\\\""));
+ zs = php_addcslashes(zs, 0, ZEND_STRL("\0..\37\173\\\""));
- if (force || len != (*zs)->len || strpbrk((*zs)->val, "()<>@,;:\"[]?={} ")) {
- int len = (*zs)->len + 2;
+ if (force || len != (zs)->len || strpbrk((zs)->val, "()<>@,;:\"[]?={} ")) {
+ int len = (zs)->len + 2;
- *zs = zend_string_extend(*zs, len, 0);
+ zs = zend_string_extend(zs, len, 0);
- memmove(&(*zs)->val[1], (*zs)->val, (*zs)->len);
- (*zs)->val[0] = '"';
- (*zs)->val[len-1] = '"';
- (*zs)->val[len] = '\0';
+ memmove(&(zs)->val[1], (zs)->val, (zs)->len);
+ (zs)->val[0] = '"';
+ (zs)->val[len-1] = '"';
+ (zs)->val[len] = '\0';
- zend_string_forget_hash_val(*zs);
+ zend_string_forget_hash_val(zs);
}
+
+ return zs;
}
/* if (Z_TYPE_P(zv) == IS_STRING) {
static inline void prepare_escaped(zval *zv)
{
if (Z_TYPE_P(zv) == IS_STRING) {
- quote_string(&Z_STR_P(zv), 0);
+ zend_string *str = quote_string(Z_STR_P(zv), 0);
+
+ zval_dtor(zv);
+ ZVAL_STR(zv, str);
} else {
zval_dtor(zv);
ZVAL_EMPTY_STRING(zv);
static inline void sanitize_urlencoded(zval *zv)
{
- Z_STRLEN_P(zv) = php_raw_url_decode(Z_STRVAL_P(zv), Z_STRLEN_P(zv));
+ Z_STRLEN_P(zv) = php_url_decode(Z_STRVAL_P(zv), Z_STRLEN_P(zv));
}
static inline void prepare_urlencoded(zval *zv)
zval *val;
php_http_buffer_t prefix;
- if (!ZEND_HASH_GET_APPLY_COUNT(ht)) {
- ZEND_HASH_INC_APPLY_COUNT(ht);
+ if (!HT_IS_RECURSIVE(ht)) {
+ HT_PROTECT_RECURSION(ht);
php_http_buffer_init(&prefix);
php_http_buffer_append(&prefix, keybuf->data, keybuf->used);
php_http_buffer_cut(&prefix, keybuf->used, prefix.used - keybuf->used);
}
ZEND_HASH_FOREACH_END();
- ZEND_HASH_DEC_APPLY_COUNT(ht);
+ HT_UNPROTECT_RECURSION(ht);
php_http_buffer_dtor(&prefix);
}
static inline void shift_rfc5988_val(php_http_buffer_t *buf, zval *zv, const char *vss, size_t vsl, unsigned flags)
{
- zend_string *zs = zval_get_string(zv);
-
- quote_string(&zs, 1);
- php_http_buffer_append(buf, vss, vsl);
- php_http_buffer_append(buf, zs->val, zs->len);
+ zend_string *str, *zs = zval_get_string(zv);
+ str = quote_string(zs, 1);
zend_string_release(zs);
+
+ php_http_buffer_append(buf, vss, vsl);
+ php_http_buffer_append(buf, str->val, str->len);
+ zend_string_release(str);
}
static inline void shift_val(php_http_buffer_t *buf, zval *zvalue, const char *vss, size_t vsl, unsigned flags)