From bda9ff8338c6394e23b9b60d0f104c2553e2f5a7 Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Fri, 4 Apr 2025 15:12:06 +0100 Subject: [PATCH 1/2] ext/gd: Flip size and nb arguments for safe_emalloc() The size should be the second one --- ext/gd/gd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/gd/gd.c b/ext/gd/gd.c index 5822c368e3de2..688658b2899b0 100644 --- a/ext/gd/gd.c +++ b/ext/gd/gd.c @@ -649,7 +649,7 @@ PHP_FUNCTION(imagesetstyle) } /* copy the style values in the stylearr */ - stylearr = safe_emalloc(sizeof(int), num_styles, 0); + stylearr = safe_emalloc(num_styles, sizeof(int), 0); ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(styles), item) { stylearr[index++] = zval_get_long(item); From d80682e753af13a89ad71ee78100ce44045f175d Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Fri, 4 Apr 2025 18:02:47 +0200 Subject: [PATCH 2/2] Avoid allocation in zend_enum_get_case_cstr() (#18239) Future uses of this internal API are planned, and we can easily avoid an allocation by factoring out the common code. --- Zend/zend_enum.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Zend/zend_enum.c b/Zend/zend_enum.c index ccafca48fe9b8..6baa34cc50125 100644 --- a/Zend/zend_enum.c +++ b/Zend/zend_enum.c @@ -610,8 +610,7 @@ ZEND_API void zend_enum_add_case_cstr(zend_class_entry *ce, const char *name, zv zend_string_release(name_str); } -ZEND_API zend_object *zend_enum_get_case(zend_class_entry *ce, zend_string *name) { - zend_class_constant *c = zend_hash_find_ptr(CE_CONSTANTS_TABLE(ce), name); +static zend_object *zend_enum_case_from_class_constant(zend_class_constant *c) { ZEND_ASSERT(c && "Must be a valid enum case"); ZEND_ASSERT(ZEND_CLASS_CONST_FLAGS(c) & ZEND_CLASS_CONST_IS_CASE); @@ -624,9 +623,12 @@ ZEND_API zend_object *zend_enum_get_case(zend_class_entry *ce, zend_string *name return Z_OBJ(c->value); } +ZEND_API zend_object *zend_enum_get_case(zend_class_entry *ce, zend_string *name) { + zend_class_constant *c = zend_hash_find_ptr(CE_CONSTANTS_TABLE(ce), name); + return zend_enum_case_from_class_constant(c); +} + ZEND_API zend_object *zend_enum_get_case_cstr(zend_class_entry *ce, const char *name) { - zend_string *name_str = zend_string_init(name, strlen(name), 0); - zend_object *result = zend_enum_get_case(ce, name_str); - zend_string_release(name_str); - return result; + zend_class_constant *c = zend_hash_str_find_ptr(CE_CONSTANTS_TABLE(ce), name, strlen(name)); + return zend_enum_case_from_class_constant(c); }