fix poperty read handler and propro usage
[m6w6/ext-http] / php_http_message.c
index ff228c77f6520d5e1d8f3681576de051ef813b66..4109202226caae9abb31ac5340c5e69800899ea3 100644 (file)
@@ -20,7 +20,7 @@ zend_bool php_http_message_info_callback(php_http_message_t **message, HashTable
 
        /* advance message */
        if (!old || old->type || zend_hash_num_elements(&old->hdrs)) {
-               (*message) = php_http_message_init(NULL, 0, NULL TSRMLS_CC);
+               (*message) = php_http_message_init(NULL, 0, NULL);
                (*message)->parent = old;
                if (headers) {
                        (*headers) = &((*message)->hdrs);
@@ -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);