From c47011ba057f49aa548302f3647e5a4e4ffaff85 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 28 Aug 2020 10:01:46 +0200 Subject: [PATCH] Use zend_string when storing incomplete class name No need to copy the string here... --- ext/standard/incomplete_class.c | 5 ++--- ext/standard/php_incomplete_class.h | 2 +- ext/standard/var_unserializer.re | 8 ++++---- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/ext/standard/incomplete_class.c b/ext/standard/incomplete_class.c index 2c847fd4fe..1824d52f44 100644 --- a/ext/standard/incomplete_class.c +++ b/ext/standard/incomplete_class.c @@ -142,12 +142,11 @@ PHPAPI zend_string *php_lookup_class_name(zend_object *object) /* }}} */ /* {{{ php_store_class_name */ -PHPAPI void php_store_class_name(zval *object, const char *name, size_t len) +PHPAPI void php_store_class_name(zval *object, zend_string *name) { zval val; - - ZVAL_STRINGL(&val, name, len); + ZVAL_STR_COPY(&val, name); zend_hash_str_update(Z_OBJPROP_P(object), MAGIC_MEMBER, sizeof(MAGIC_MEMBER)-1, &val); } /* }}} */ diff --git a/ext/standard/php_incomplete_class.h b/ext/standard/php_incomplete_class.h index c2cda0d6f0..f36fd43cfc 100644 --- a/ext/standard/php_incomplete_class.h +++ b/ext/standard/php_incomplete_class.h @@ -51,7 +51,7 @@ extern "C" { PHPAPI void php_register_incomplete_class(void); PHPAPI zend_string *php_lookup_class_name(zend_object *object); -PHPAPI void php_store_class_name(zval *object, const char *name, size_t len); +PHPAPI void php_store_class_name(zval *object, zend_string *name); #ifdef __cplusplus }; diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re index e7a48d4d8e..928cf29392 100644 --- a/ext/standard/var_unserializer.re +++ b/ext/standard/var_unserializer.re @@ -1013,7 +1013,7 @@ use_double: } object ":" uiv ":" ["] { - size_t len, len2, len3, maxlen; + size_t len, len3, maxlen; zend_long elements; char *str; zend_string *class_name; @@ -1031,7 +1031,7 @@ object ":" uiv ":" ["] { custom_object = 1; } - len2 = len = parse_uiv(start + 2); + len = parse_uiv(start + 2); maxlen = max - YYCURSOR; if (maxlen < len || len == 0) { *p = start + 2; @@ -1143,7 +1143,7 @@ object ":" uiv ":" ["] { ret = object_custom(UNSERIALIZE_PASSTHRU, ce); if (ret && incomplete_class) { - php_store_class_name(rval, ZSTR_VAL(class_name), len2); + php_store_class_name(rval, class_name); } zend_string_release_ex(class_name, 0); return ret; @@ -1181,7 +1181,7 @@ object ":" uiv ":" ["] { } if (incomplete_class) { - php_store_class_name(rval, ZSTR_VAL(class_name), len2); + php_store_class_name(rval, class_name); } zend_string_release_ex(class_name, 0); -- 2.50.1