X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Fphp_http_message.c;h=54bc8b254e2e9511fc50cb88442a887b1fe7ef4a;hb=88ef34102763b9bd64cc3787ca704b3141c8a905;hp=1bbc53cefce10150da3d7d03de434c19bec48895;hpb=e44e3ceb60817cfdd17945a3f6043816e134aa75;p=m6w6%2Fext-http diff --git a/src/php_http_message.c b/src/php_http_message.c index 1bbc53c..54bc8b2 100644 --- a/src/php_http_message.c +++ b/src/php_http_message.c @@ -1764,44 +1764,53 @@ static PHP_METHOD(HttpMessage, toCallback) ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessage_serialize, 0, 0, 0) ZEND_END_ARG_INFO(); -static PHP_METHOD(HttpMessage, serialize) +static PHP_METHOD(HttpMessage, __serialize) { - if (SUCCESS == zend_parse_parameters_none()) { - php_http_message_object_t *obj = PHP_HTTP_OBJ(NULL, getThis()); - char *string; - size_t length; - - PHP_HTTP_MESSAGE_OBJECT_INIT(obj); + php_http_message_object_t *obj = PHP_HTTP_OBJ(NULL, getThis()); + char *string; + size_t length; + zval zstr; - php_http_message_serialize(obj->message, &string, &length); - RETURN_STR(php_http_cs2zs(string, length)); + if (zend_parse_parameters_none() == FAILURE) { + RETURN_THROWS(); } - RETURN_EMPTY_STRING(); + array_init(return_value); + + PHP_HTTP_MESSAGE_OBJECT_INIT(obj); + + php_http_message_serialize(obj->message, &string, &length); + ZVAL_STR(&zstr, php_http_cs2zs(string, length)); + zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &zstr); } ZEND_BEGIN_ARG_INFO_EX(ai_HttpMessage_unserialize, 0, 0, 1) ZEND_ARG_INFO(0, serialized) ZEND_END_ARG_INFO(); -static PHP_METHOD(HttpMessage, unserialize) +static PHP_METHOD(HttpMessage, __unserialize) { - size_t length; - char *serialized; + zval *serialized; + HashTable *data; - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "s", &serialized, &length)) { - php_http_message_object_t *obj = PHP_HTTP_OBJ(NULL, getThis()); - php_http_message_t *msg; + if (zend_parse_parameters(ZEND_NUM_ARGS(), "h", &data) == FAILURE) { + RETURN_THROWS(); + } - if (obj->message) { - /* do not free recursively */ - php_http_message_dtor(obj->message); - efree(obj->message); - } - if ((msg = php_http_message_parse(NULL, serialized, length, 1))) { - obj->message = msg; - } else { - obj->message = php_http_message_init(NULL, 0, NULL); - php_error_docref(NULL, E_ERROR, "Could not unserialize http\\Message"); - } + php_http_message_object_t *obj = PHP_HTTP_OBJ(NULL, getThis()); + php_http_message_t *msg; + + if (obj->message) { + /* do not free recursively */ + php_http_message_dtor(obj->message); + efree(obj->message); + } + + serialized = zend_hash_index_find(data, 0); + if (serialized && Z_TYPE_P(serialized) == IS_STRING && + (msg = php_http_message_parse(NULL, Z_STRVAL_P(serialized), Z_STRLEN_P(serialized), 1))) { + obj->message = msg; + } else { + obj->message = php_http_message_init(NULL, 0, NULL); + php_error_docref(NULL, E_ERROR, "Could not unserialize http\\Message"); } } @@ -2038,9 +2047,8 @@ static zend_function_entry php_http_message_methods[] = { /* implements Countable */ PHP_ME(HttpMessage, count, ai_HttpMessage_count, ZEND_ACC_PUBLIC) - /* implements Serializable */ - PHP_ME(HttpMessage, serialize, ai_HttpMessage_serialize, ZEND_ACC_PUBLIC) - PHP_ME(HttpMessage, unserialize, ai_HttpMessage_unserialize, ZEND_ACC_PUBLIC) + PHP_ME(HttpMessage, __serialize, ai_HttpMessage_serialize, ZEND_ACC_PUBLIC) + PHP_ME(HttpMessage, __unserialize, ai_HttpMessage_unserialize, ZEND_ACC_PUBLIC) /* implements Iterator */ PHP_ME(HttpMessage, rewind, ai_HttpMessage_rewind, ZEND_ACC_PUBLIC) @@ -2075,15 +2083,11 @@ PHP_MINIT_FUNCTION(http_message) php_http_message_object_handlers.read_property = php_http_message_object_read_prop; php_http_message_object_handlers.write_property = php_http_message_object_write_prop; php_http_message_object_handlers.get_debug_info = php_http_message_object_get_debug_info; -#if PHP_VERSION_ID >= 70400 php_http_message_object_handlers.get_property_ptr_ptr = php_http_message_object_get_prop_ptr; -#else - php_http_message_object_handlers.get_property_ptr_ptr = NULL; -#endif php_http_message_object_handlers.get_gc = php_http_message_object_get_gc; php_http_message_object_handlers.cast_object = php_http_message_object_cast; - zend_class_implements(php_http_message_class_entry, 3, spl_ce_Countable, zend_ce_serializable, zend_ce_iterator); + zend_class_implements(php_http_message_class_entry, 2, zend_ce_countable, zend_ce_iterator); zend_hash_init(&php_http_message_object_prophandlers, 9, NULL, php_http_message_object_prophandler_hash_dtor, 1); zend_declare_property_long(php_http_message_class_entry, ZEND_STRL("type"), PHP_HTTP_NONE, ZEND_ACC_PROTECTED);