X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_message_object.c;h=3129193147c2404e8bb66d804f2dd43c292d5e78;hp=c3585c14eee57a43474744c4544a383294fa1716;hb=7e20868975f5c23ccd74af0d8f7147c506d2b8cf;hpb=ad5f896b03adaa073134a00108a9cdf00720673a diff --git a/http_message_object.c b/http_message_object.c index c3585c1..3129193 100644 --- a/http_message_object.c +++ b/http_message_object.c @@ -579,11 +579,24 @@ static zval *_http_message_object_read_prop(zval *object, zval *member, int type { getObjectEx(http_message_object, obj, object); http_message_object_prophandler *handler; - zval *return_value; + zval *return_value, *tmp_member = NULL; + + if (Z_TYPE_P(member) != IS_STRING) { + ALLOC_ZVAL(tmp_member); + MAKE_COPY_ZVAL(&member, tmp_member); + convert_to_string(tmp_member); + member = tmp_member; +#if PHP_VERSION_ID >= 50399 + _zend_literal_key = NULL; +#endif + } if (SUCCESS == http_message_object_get_prophandler(Z_STRVAL_P(member), Z_STRLEN_P(member), &handler)) { if (type == BP_VAR_W) { zend_error(E_ERROR, "Cannot access HttpMessage properties by reference or array key/index"); + if (tmp_member) { + zval_ptr_dtor(&tmp_member); + } return NULL; } @@ -602,6 +615,9 @@ static zval *_http_message_object_read_prop(zval *object, zval *member, int type return_value = zend_get_std_object_handlers()->read_property(object, member, type ZEND_LITERAL_KEY_CC TSRMLS_CC); } + if (tmp_member) { + zval_ptr_dtor(&tmp_member); + } return return_value; } @@ -609,12 +625,26 @@ static void _http_message_object_write_prop(zval *object, zval *member, zval *va { getObjectEx(http_message_object, obj, object); http_message_object_prophandler *handler; + zval *tmp_member = NULL; + + if (Z_TYPE_P(member) != IS_STRING) { + ALLOC_ZVAL(tmp_member); + MAKE_COPY_ZVAL(&member, tmp_member); + convert_to_string(tmp_member); + member = tmp_member; +#if PHP_VERSION_ID >= 50399 + _zend_literal_key = NULL; +#endif + } if (SUCCESS == http_message_object_get_prophandler(Z_STRVAL_P(member), Z_STRLEN_P(member), &handler)) { handler->write(obj, value TSRMLS_CC); } else { zend_get_std_object_handlers()->write_property(object, member, value ZEND_LITERAL_KEY_CC TSRMLS_CC); } + if (tmp_member) { + zval_ptr_dtor(&tmp_member); + } } static HashTable *_http_message_object_get_props(zval *object TSRMLS_DC)