From: Michael Wallner Date: Thu, 10 Nov 2005 14:32:50 +0000 (+0000) Subject: - fix write access of HttpMessage properties X-Git-Tag: RELEASE_0_18_0~14 X-Git-Url: https://git.m6w6.name/?a=commitdiff_plain;h=a24c825ac83a673d31b8c57ec89e9f5667e4668d;p=m6w6%2Fext-http - fix write access of HttpMessage properties --- diff --git a/http_message_object.c b/http_message_object.c index 3107439..a965a66 100644 --- a/http_message_object.c +++ b/http_message_object.c @@ -361,6 +361,7 @@ static void _http_message_object_write_prop(zval *object, zval *member, zval *va { getObjectEx(http_message_object, obj, object); http_message *msg = obj->message; + zval *cpy = NULL; #ifdef WONKY ulong h = zend_get_hash_value(Z_STRVAL_P(member), Z_STRLEN_P(member) + 1); #else @@ -371,7 +372,12 @@ static void _http_message_object_write_prop(zval *object, zval *member, zval *va return; } #endif - + + ALLOC_ZVAL(cpy); + *cpy = *value; + zval_copy_ctor(cpy); + INIT_PZVAL(cpy); + #ifdef WONKY switch (h) #else @@ -380,28 +386,28 @@ static void _http_message_object_write_prop(zval *object, zval *member, zval *va { case HTTP_MSG_PROPHASH_TYPE: case HTTP_MSG_CHILD_PROPHASH_TYPE: - convert_to_long_ex(&value); - http_message_set_type(msg, Z_LVAL_P(value)); + convert_to_long(cpy); + http_message_set_type(msg, Z_LVAL_P(cpy)); break; case HTTP_MSG_PROPHASH_HTTP_VERSION: case HTTP_MSG_CHILD_PROPHASH_HTTP_VERSION: - convert_to_double_ex(&value); - msg->http.version = Z_DVAL_P(value); + convert_to_double(cpy); + msg->http.version = Z_DVAL_P(cpy); break; case HTTP_MSG_PROPHASH_BODY: case HTTP_MSG_CHILD_PROPHASH_BODY: - convert_to_string_ex(&value); + convert_to_string(cpy); phpstr_dtor(PHPSTR(msg)); - phpstr_from_string_ex(PHPSTR(msg), Z_STRVAL_P(value), Z_STRLEN_P(value)); + phpstr_from_string_ex(PHPSTR(msg), Z_STRVAL_P(cpy), Z_STRLEN_P(cpy)); break; case HTTP_MSG_PROPHASH_HEADERS: case HTTP_MSG_CHILD_PROPHASH_HEADERS: - convert_to_array_ex(&value); + convert_to_array(cpy); zend_hash_clean(&msg->hdrs); - zend_hash_copy(&msg->hdrs, Z_ARRVAL_P(value), (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *)); + zend_hash_copy(&msg->hdrs, Z_ARRVAL_P(cpy), (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *)); break; case HTTP_MSG_PROPHASH_PARENT_MESSAGE: @@ -420,41 +426,44 @@ static void _http_message_object_write_prop(zval *object, zval *member, zval *va case HTTP_MSG_PROPHASH_REQUEST_METHOD: case HTTP_MSG_CHILD_PROPHASH_REQUEST_METHOD: if (HTTP_MSG_TYPE(REQUEST, msg)) { - convert_to_string_ex(&value); - STR_SET(msg->http.info.request.method, estrndup(Z_STRVAL_P(value), Z_STRLEN_P(value))); + convert_to_string(cpy); + STR_SET(msg->http.info.request.method, estrndup(Z_STRVAL_P(cpy), Z_STRLEN_P(cpy))); } break; case HTTP_MSG_PROPHASH_REQUEST_URI: case HTTP_MSG_CHILD_PROPHASH_REQUEST_URI: if (HTTP_MSG_TYPE(REQUEST, msg)) { - convert_to_string_ex(&value); - STR_SET(msg->http.info.request.URI, estrndup(Z_STRVAL_P(value), Z_STRLEN_P(value))); + convert_to_string(cpy); + STR_SET(msg->http.info.request.URI, estrndup(Z_STRVAL_P(cpy), Z_STRLEN_P(cpy))); } break; case HTTP_MSG_PROPHASH_RESPONSE_CODE: case HTTP_MSG_CHILD_PROPHASH_RESPONSE_CODE: if (HTTP_MSG_TYPE(RESPONSE, msg)) { - convert_to_long_ex(&value); - msg->http.info.response.code = Z_LVAL_P(value); + convert_to_long(cpy); + msg->http.info.response.code = Z_LVAL_P(cpy); } break; case HTTP_MSG_PROPHASH_RESPONSE_STATUS: case HTTP_MSG_CHILD_PROPHASH_RESPONSE_STATUS: if (HTTP_MSG_TYPE(RESPONSE, msg)) { - convert_to_string_ex(&value); - STR_SET(msg->http.info.response.status, estrndup(Z_STRVAL_P(value), Z_STRLEN_P(value))); + convert_to_string(cpy); + STR_SET(msg->http.info.response.status, estrndup(Z_STRVAL_P(cpy), Z_STRLEN_P(cpy))); } break; default: #ifdef WONKY + zval_ptr_dtor(&cpy); zend_get_std_object_handlers()->write_property(object, member, value TSRMLS_CC); + return; #endif break; } + zval_ptr_dtor(&cpy); } static HashTable *_http_message_object_get_props(zval *object TSRMLS_DC) diff --git a/package2.xml b/package2.xml index c648637..787a62a 100644 --- a/package2.xml +++ b/package2.xml @@ -47,6 +47,7 @@ * Fixed a bug that caused a warning about an invalid curl handle at HttpRequestPool destruction * Fixed a bug with http_get_request_headers() modifying $_SERVER array * Fixed a bug which required "=" in Content-Range response message headers +* Fixed a bug with directly setting HttpMessage property values ]]> @@ -175,12 +176,14 @@ + +