X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_message.c;h=4109202226caae9abb31ac5340c5e69800899ea3;hp=3fddf79701dc6a152d3647f84ac32d28fb957af3;hb=55ecd561795b73a44c9aa6495af0602d114eac24;hpb=49c4716aa5a97b2ae94491e74f5ff5c13c0ddee3 diff --git a/php_http_message.c b/php_http_message.c index 3fddf79..4109202 100644 --- a/php_http_message.c +++ b/php_http_message.c @@ -851,23 +851,26 @@ void php_http_message_object_free(zend_object *object) zend_object_std_dtor(object); } -static zval *php_http_message_object_read_prop(zval *object, zval *member, int type, void **cache_slot, zval *return_value) +static zval *php_http_message_object_read_prop(zval *object, zval *member, int type, void **cache_slot, zval *tmp) { - php_http_message_object_t *obj = PHP_HTTP_OBJ(NULL, object); - php_http_message_object_prophandler_t *handler; + zval *return_value; zend_string *member_name = zval_get_string(member); + php_http_message_object_prophandler_t *handler = php_http_message_object_get_prophandler(member_name); - PHP_HTTP_MESSAGE_OBJECT_INIT(obj); + if (!handler || type == BP_VAR_R || type == BP_VAR_IS) { + return_value = zend_get_std_object_handlers()->read_property(object, member, type, cache_slot, tmp); - if ((handler = php_http_message_object_get_prophandler(member_name))) { - if (type == BP_VAR_R) { - handler->read(obj, return_value); - } else { - php_property_proxy_t *proxy = php_property_proxy_init(object, member_name); - RETVAL_OBJ(&php_property_proxy_object_new_ex(php_property_proxy_get_class_entry(), proxy)->zo); + if (handler) { + php_http_message_object_t *obj = PHP_HTTP_OBJ(NULL, object); + + PHP_HTTP_MESSAGE_OBJECT_INIT(obj); + handler->read(obj, tmp); + + zval_ptr_dtor(return_value); + ZVAL_COPY_VALUE(return_value, tmp); } } else { - zend_get_std_object_handlers()->read_property(object, member, type, cache_slot, return_value); + return_value = php_property_proxy_zval(object, member_name); } zend_string_release(member_name); @@ -1434,7 +1437,7 @@ ZEND_END_ARG_INFO(); static PHP_METHOD(HttpMessage, setResponseStatus) { char *status; - int status_len; + size_t status_len; php_http_message_object_t *obj; php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &status, &status_len), invalid_arg, return);