|   | php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | 
| 
  [2013-07-25 12:01 UTC] laruence@php.net
 Description:
------------
the codes is obviously wrong
if the php_memc_zval_from_payload return -1, the value's type is unitialized 
value.
so the patch is:
diff --git a/php_memcached.c b/php_memcached.c
index bf3037c..6ae3147 100644
--- a/php_memcached.c
+++ b/php_memcached.c
@@ -784,7 +784,7 @@ static void 
php_memc_getMulti_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_ke
 		MAKE_STD_ZVAL(value);
 		if (php_memc_zval_from_payload(value, payload, payload_len, flags, 
m_obj->serializer TSRMLS_CC) < 0) {
-			zval_ptr_dtor(&value);
+			efree(value);
 			if (EG(exception)) {
 				status = MEMC_RES_PAYLOAD_FAILURE;
 				php_memc_handle_error(i_obj, status TSRMLS_CC);
Patchesbug65334.patch (last revision 2013-07-26 03:22 UTC by laruence@php.net)Pull RequestsHistoryAllCommentsChangesGit/SVN commits             | |||||||||||||||||||||||||||||||||||||
|  Copyright © 2001-2025 The PHP Group All rights reserved. | Last updated: Fri Oct 31 12:00:01 2025 UTC | 
maybe this patch is better: $ git diff diff --git a/php_memcached.c b/php_memcached.c index bf3037c..677858c 100644 --- a/php_memcached.c +++ b/php_memcached.c @@ -2604,6 +2604,7 @@ static int php_memc_zval_from_payload(zval *value, char *payload, size_t payload if (payload == NULL && payload_len > 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not handle non-existing value of length %zu", payload_len); + ZVAL_NULL(value); return -1; } else if (payload == NULL) { if (MEMC_VAL_GET_TYPE(flags) == MEMC_VAL_IS_BOOL) { @@ -2654,6 +2655,7 @@ static int php_memc_zval_from_payload(zval *value, char *payload, size_t payload if (!decompress_status) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "could not decompress value"); + ZVAL_NULL(value); efree(buffer); return -1; }