Skip to content

Commit 5a54e79

Browse files
committed
Redirect add_property_TYPE() calls to zend_update_property_TYPE()
As those functions effectively did the same thing just with a slightly different signature Except the add_property_str() version unintentionally took ownership of the zend_string and released it Maintain this awkward behaviour for the time being.
1 parent 1631e22 commit 5a54e79

File tree

2 files changed

+71
-126
lines changed

2 files changed

+71
-126
lines changed

Zend/zend_API.c

Lines changed: 0 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -2145,33 +2145,6 @@ ZEND_API zend_result array_set_zval_key(HashTable *ht, zval *key, zval *value) /
21452145
}
21462146
/* }}} */
21472147

2148-
ZEND_API void add_property_long_ex(zval *arg, const char *key, size_t key_len, zend_long n) /* {{{ */
2149-
{
2150-
zval tmp;
2151-
2152-
ZVAL_LONG(&tmp, n);
2153-
add_property_zval_ex(arg, key, key_len, &tmp);
2154-
}
2155-
/* }}} */
2156-
2157-
ZEND_API void add_property_bool_ex(zval *arg, const char *key, size_t key_len, zend_long b) /* {{{ */
2158-
{
2159-
zval tmp;
2160-
2161-
ZVAL_BOOL(&tmp, b);
2162-
add_property_zval_ex(arg, key, key_len, &tmp);
2163-
}
2164-
/* }}} */
2165-
2166-
ZEND_API void add_property_null_ex(zval *arg, const char *key, size_t key_len) /* {{{ */
2167-
{
2168-
zval tmp;
2169-
2170-
ZVAL_NULL(&tmp);
2171-
add_property_zval_ex(arg, key, key_len, &tmp);
2172-
}
2173-
/* }}} */
2174-
21752148
ZEND_API void add_property_resource_ex(zval *arg, const char *key, size_t key_len, zend_resource *r) /* {{{ */
21762149
{
21772150
zval tmp;
@@ -2182,45 +2155,6 @@ ZEND_API void add_property_resource_ex(zval *arg, const char *key, size_t key_le
21822155
}
21832156
/* }}} */
21842157

2185-
ZEND_API void add_property_double_ex(zval *arg, const char *key, size_t key_len, double d) /* {{{ */
2186-
{
2187-
zval tmp;
2188-
2189-
ZVAL_DOUBLE(&tmp, d);
2190-
add_property_zval_ex(arg, key, key_len, &tmp);
2191-
}
2192-
/* }}} */
2193-
2194-
ZEND_API void add_property_str_ex(zval *arg, const char *key, size_t key_len, zend_string *str) /* {{{ */
2195-
{
2196-
zval tmp;
2197-
2198-
ZVAL_STR(&tmp, str);
2199-
add_property_zval_ex(arg, key, key_len, &tmp);
2200-
zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
2201-
}
2202-
/* }}} */
2203-
2204-
ZEND_API void add_property_string_ex(zval *arg, const char *key, size_t key_len, const char *str) /* {{{ */
2205-
{
2206-
zval tmp;
2207-
2208-
ZVAL_STRING(&tmp, str);
2209-
add_property_zval_ex(arg, key, key_len, &tmp);
2210-
zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
2211-
}
2212-
/* }}} */
2213-
2214-
ZEND_API void add_property_stringl_ex(zval *arg, const char *key, size_t key_len, const char *str, size_t length) /* {{{ */
2215-
{
2216-
zval tmp;
2217-
2218-
ZVAL_STRINGL(&tmp, str, length);
2219-
add_property_zval_ex(arg, key, key_len, &tmp);
2220-
zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
2221-
}
2222-
/* }}} */
2223-
22242158
ZEND_API void add_property_array_ex(zval *arg, const char *key, size_t key_len, zend_array *arr) /* {{{ */
22252159
{
22262160
zval tmp;
@@ -2251,16 +2185,6 @@ ZEND_API void add_property_reference_ex(zval *arg, const char *key, size_t key_l
22512185
}
22522186
/* }}} */
22532187

2254-
ZEND_API void add_property_zval_ex(zval *arg, const char *key, size_t key_len, zval *value) /* {{{ */
2255-
{
2256-
zend_string *str;
2257-
2258-
str = zend_string_init(key, key_len, 0);
2259-
Z_OBJ_HANDLER_P(arg, write_property)(Z_OBJ_P(arg), str, value, NULL);
2260-
zend_string_release_ex(str, 0);
2261-
}
2262-
/* }}} */
2263-
22642188
ZEND_API zend_result zend_startup_module_ex(zend_module_entry *module) /* {{{ */
22652189
{
22662190
size_t name_len;

Zend/zend_API.h

Lines changed: 71 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,77 @@ ZEND_API void zend_update_property_stringl_ex(zend_class_entry *scope, zend_obje
506506
ZEND_API void zend_unset_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length);
507507
ZEND_API void zend_unset_property_ex(zend_class_entry *scope, zend_object *object, zend_string *name);
508508

509+
/* Legacy API */
510+
static zend_always_inline void add_property_zval(zval *z_object, const char *name, zval *value) {
511+
zend_update_property(Z_OBJCE_P(z_object), Z_OBJ_P(z_object), name, strlen(name), value);
512+
}
513+
static zend_always_inline void add_property_zval_ex(zval *z_object, const char *name, size_t name_length, zval *value) {
514+
zend_update_property(Z_OBJCE_P(z_object), Z_OBJ_P(z_object), name, name_length, value);
515+
}
516+
static zend_always_inline void add_property_null(zval *z_object, const char *name) {
517+
zend_update_property_null(Z_OBJCE_P(z_object), Z_OBJ_P(z_object), name, strlen(name));
518+
}
519+
static zend_always_inline void add_property_null_ex(zval *z_object, const char *name, size_t name_length) {
520+
zend_update_property_null(Z_OBJCE_P(z_object), Z_OBJ_P(z_object), name, name_length);
521+
}
522+
static zend_always_inline void add_property_bool(zval *z_object, const char *name, bool value) {
523+
zend_update_property_bool(Z_OBJCE_P(z_object), Z_OBJ_P(z_object), name, strlen(name), value);
524+
}
525+
static zend_always_inline void add_property_bool_ex(zval *z_object, const char *name, size_t name_length, bool value) {
526+
zend_update_property_bool(Z_OBJCE_P(z_object), Z_OBJ_P(z_object), name, name_length, value);
527+
}
528+
static zend_always_inline void add_property_long(zval *z_object, const char *name, zend_long value) {
529+
zend_update_property_long(Z_OBJCE_P(z_object), Z_OBJ_P(z_object), name, strlen(name), value);
530+
}
531+
static zend_always_inline void add_property_long_ex(zval *z_object, const char *name, size_t name_length, zend_long value) {
532+
zend_update_property_long(Z_OBJCE_P(z_object), Z_OBJ_P(z_object), name, name_length, value);
533+
}
534+
static zend_always_inline void add_property_double(zval *z_object, const char *name, double value) {
535+
zend_update_property_double(Z_OBJCE_P(z_object), Z_OBJ_P(z_object), name, strlen(name), value);
536+
}
537+
static zend_always_inline void add_property_double_ex(zval *z_object, const char *name, size_t name_length, double value) {
538+
zend_update_property_double(Z_OBJCE_P(z_object), Z_OBJ_P(z_object), name, name_length, value);
539+
}
540+
static zend_always_inline void add_property_str(zval *z_object, const char *name, zend_string *value) {
541+
zend_update_property_str(Z_OBJCE_P(z_object), Z_OBJ_P(z_object), name, strlen(name), value);
542+
/* This legacy API assumed that the passed zend_string* would be freed */
543+
zend_string_release(value);
544+
}
545+
static zend_always_inline void add_property_str_ex(zval *z_object, const char *name, size_t name_length, zend_string *value) {
546+
zend_update_property_str(Z_OBJCE_P(z_object), Z_OBJ_P(z_object), name, name_length, value);
547+
/* This legacy API assumed that the passed zend_string* would be freed */
548+
zend_string_release(value);
549+
}
550+
static zend_always_inline void add_property_string(zval *z_object, const char *name, const char *value) {
551+
zend_update_property_string(Z_OBJCE_P(z_object), Z_OBJ_P(z_object), name, strlen(name), value);
552+
}
553+
static zend_always_inline void add_property_string_ex(zval *z_object, const char *name, size_t name_length, const char *value) {
554+
zend_update_property_string(Z_OBJCE_P(z_object), Z_OBJ_P(z_object), name, name_length, value);
555+
}
556+
static zend_always_inline void add_property_stringl(zval *z_object, const char *name, const char *value, size_t value_len) {
557+
zend_update_property_stringl(Z_OBJCE_P(z_object), Z_OBJ_P(z_object), name, strlen(name), value, value_len);
558+
}
559+
static zend_always_inline void add_property_stringl_ex(zval *z_object, const char *name, size_t name_length, const char *value, size_t value_len) {
560+
zend_update_property_stringl(Z_OBJCE_P(z_object), Z_OBJ_P(z_object), name, name_length, value, value_len);
561+
}
562+
563+
ZEND_API void add_property_resource_ex(zval *arg, const char *key, size_t key_len, zend_resource *r);
564+
ZEND_API void add_property_array_ex(zval *arg, const char *key, size_t key_len, zend_array *arr);
565+
ZEND_API void add_property_object_ex(zval *arg, const char *key, size_t key_len, zend_object *obj);
566+
ZEND_API void add_property_reference_ex(zval *arg, const char *key, size_t key_len, zend_reference *ref);
567+
static zend_always_inline void add_property_resource(zval *arg, const char *key, zend_resource *r) {
568+
add_property_resource_ex(arg, key, strlen(key), r);
569+
}
570+
static zend_always_inline void add_property_array(zval *arg, const char *key, zend_array *arr) {
571+
add_property_array_ex(arg, key, strlen(key), arr);
572+
}
573+
static zend_always_inline void add_property_object(zval *arg, const char *key, zend_object *obj) {
574+
add_property_object_ex(arg, key, strlen(key), obj);
575+
}
576+
static zend_always_inline void add_property_reference(zval *arg, const char *key, zend_reference *ref) {
577+
add_property_reference_ex(arg, key, strlen(key), ref);
578+
}
579+
509580
ZEND_API zend_result zend_update_static_property_ex(zend_class_entry *scope, zend_string *name, zval *value);
510581
ZEND_API zend_result zend_update_static_property(zend_class_entry *scope, const char *name, size_t name_length, zval *value);
511582
ZEND_API zend_result zend_update_static_property_null(zend_class_entry *scope, const char *name, size_t name_length);
@@ -641,56 +712,6 @@ static zend_always_inline zend_result add_next_index_zval(zval *arg, zval *value
641712

642713
ZEND_API zend_result array_set_zval_key(HashTable *ht, zval *key, zval *value);
643714

644-
ZEND_API void add_property_long_ex(zval *arg, const char *key, size_t key_len, zend_long l);
645-
ZEND_API void add_property_null_ex(zval *arg, const char *key, size_t key_len);
646-
ZEND_API void add_property_bool_ex(zval *arg, const char *key, size_t key_len, zend_long b);
647-
ZEND_API void add_property_resource_ex(zval *arg, const char *key, size_t key_len, zend_resource *r);
648-
ZEND_API void add_property_double_ex(zval *arg, const char *key, size_t key_len, double d);
649-
ZEND_API void add_property_str_ex(zval *arg, const char *key, size_t key_len, zend_string *str);
650-
ZEND_API void add_property_string_ex(zval *arg, const char *key, size_t key_len, const char *str);
651-
ZEND_API void add_property_stringl_ex(zval *arg, const char *key, size_t key_len, const char *str, size_t length);
652-
ZEND_API void add_property_array_ex(zval *arg, const char *key, size_t key_len, zend_array *arr);
653-
ZEND_API void add_property_object_ex(zval *arg, const char *key, size_t key_len, zend_object *obj);
654-
ZEND_API void add_property_reference_ex(zval *arg, const char *key, size_t key_len, zend_reference *ref);
655-
ZEND_API void add_property_zval_ex(zval *arg, const char *key, size_t key_len, zval *value);
656-
657-
static zend_always_inline void add_property_long(zval *arg, const char *key, zend_long n) {
658-
add_property_long_ex(arg, key, strlen(key), n);
659-
}
660-
static zend_always_inline void add_property_null(zval *arg, const char *key) {
661-
add_property_null_ex(arg, key, strlen(key));
662-
}
663-
static zend_always_inline void add_property_bool(zval *arg, const char *key, bool b) {
664-
add_property_bool_ex(arg, key, strlen(key), b);
665-
}
666-
static zend_always_inline void add_property_resource(zval *arg, const char *key, zend_resource *r) {
667-
add_property_resource_ex(arg, key, strlen(key), r);
668-
}
669-
static zend_always_inline void add_property_double(zval *arg, const char *key, double d) {
670-
add_property_double_ex(arg, key, strlen(key), d);
671-
}
672-
static zend_always_inline void add_property_str(zval *arg, const char *key, zend_string *str) {
673-
add_property_str_ex(arg, key, strlen(key), str);
674-
}
675-
static zend_always_inline void add_property_string(zval *arg, const char *key, const char *str) {
676-
add_property_string_ex(arg, key, strlen(key), str);
677-
}
678-
static zend_always_inline void add_property_stringl(zval *arg, const char *key, const char *str, size_t length) {
679-
add_property_stringl_ex(arg, key, strlen(key), str, length);
680-
}
681-
static zend_always_inline void add_property_array(zval *arg, const char *key, zend_array *arr) {
682-
add_property_array_ex(arg, key, strlen(key), arr);
683-
}
684-
static zend_always_inline void add_property_object(zval *arg, const char *key, zend_object *obj) {
685-
add_property_object_ex(arg, key, strlen(key), obj);
686-
}
687-
static zend_always_inline void add_property_reference(zval *arg, const char *key, zend_reference *ref) {
688-
add_property_reference_ex(arg, key, strlen(key), ref);
689-
}
690-
static zend_always_inline void add_property_zval(zval *arg, const char *key, zval *value) {
691-
add_property_zval_ex(arg, key, strlen(key), value);
692-
}
693-
694715
ZEND_API zend_result _call_user_function_impl(zval *object, zval *function_name, zval *retval_ptr, uint32_t param_count, zval params[], HashTable *named_params);
695716

696717
#define call_user_function(function_table, object, function_name, retval_ptr, param_count, params) \

0 commit comments

Comments
 (0)