array_init(&new_opts);
old_opts = zend_read_property(this_ce, instance, ZEND_STRL("options"), 0, &old_opts_tmp);
+
if (Z_TYPE_P(old_opts) == IS_ARRAY) {
array_copy(Z_ARRVAL_P(old_opts), Z_ARRVAL(new_opts));
}
}
} else if (opts && zend_hash_num_elements(Z_ARRVAL_P(opts))) {
if ((entry = zend_symtable_str_find(Z_ARRVAL(new_opts), key, len))) {
+ SEPARATE_ZVAL(entry);
array_join(Z_ARRVAL_P(opts), Z_ARRVAL_P(entry), 0, 0);
} else {
Z_ADDREF_P(opts);
HashTable *allowed_extras = NULL;
zend_error_handling zeh;
- php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "|z!lH", &zcookie, &flags, &allowed_extras), invalid_arg, return);
+ php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "|z!lH/", &zcookie, &flags, &allowed_extras), invalid_arg, return);
obj = PHP_HTTP_OBJ(NULL, getThis());
HashTable *cookies = NULL;
php_http_cookie_object_t *obj;
- php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "|H", &cookies), invalid_arg, return);
+ php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "|H/", &cookies), invalid_arg, return);
obj = PHP_HTTP_OBJ(NULL, getThis());
HashTable *cookies = NULL;
php_http_cookie_object_t *obj;
- php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "H", &cookies), invalid_arg, return);
+ php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "H/", &cookies), invalid_arg, return);
obj = PHP_HTTP_OBJ(NULL, getThis());
HashTable *extras = NULL;
php_http_cookie_object_t *obj;
- php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "|H", &extras), invalid_arg, return);
+ php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "|H/", &extras), invalid_arg, return);
obj = PHP_HTTP_OBJ(NULL, getThis());
HashTable *extras = NULL;
php_http_cookie_object_t *obj;
- php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "H", &extras), invalid_arg, return);
+ php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "H/", &extras), invalid_arg, return);
obj = PHP_HTTP_OBJ(NULL, getThis());
zval *aval;
zend_string *str;
+ ZVAL_DEREF(val);
switch (Z_TYPE_P(val)) {
case IS_ARRAY:
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(val), aval)
PHP_HTTP_MESSAGE_OBJECT_INIT(obj);
handler->read(obj, tmp);
- zval_ptr_dtor(return_value);
+ //zval_ptr_dtor(return_value);
ZVAL_COPY_VALUE(return_value, tmp);
}
zend_string_release(member_name);
#define PHP_HTTP_DO_NEGOTIATE_DEFAULT(supported) \
{ \
zval *value; \
+ HashPosition pos; \
\
- zend_hash_internal_pointer_reset((supported)); \
- if ((value = zend_hash_get_current_data((supported)))) { \
+ zend_hash_internal_pointer_reset_ex((supported), &pos); \
+ if ((value = zend_hash_get_current_data_ex((supported), &pos))) { \
RETVAL_ZVAL(value, 1, 0); \
} else { \
RETVAL_NULL(); \
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 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)