]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.4' into master
authorChristoph M. Becker <cmbecker69@gmx.de>
Wed, 26 Aug 2020 13:43:43 +0000 (15:43 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Wed, 26 Aug 2020 13:43:43 +0000 (15:43 +0200)
* PHP-7.4:
  Fix com_safearray_proxy related memory management issues

1  2 
ext/com_dotnet/com_saproxy.c

index d86fb75e3ede4b2febfdae4fee858382fd7cc846,8369a4bcdde2a4927598dc1a703d7006a483a550..dbb00b1596b9dacd5d06442f70025068cd126006
@@@ -371,8 -391,8 +373,8 @@@ static zend_object* saproxy_clone(zend_
        cloneproxy = emalloc(sizeof(*cloneproxy));
        memcpy(cloneproxy, proxy, sizeof(*cloneproxy));
  
 -      Z_ADDREF_P(cloneproxy->zobj);
 +      GC_ADDREF(&cloneproxy->obj->zo);
-       cloneproxy->indices = safe_emalloc(cloneproxy->dimensions, sizeof(zval *), 0);
+       cloneproxy->indices = safe_emalloc(cloneproxy->dimensions, sizeof(zval), 0);
        clone_indices(cloneproxy, proxy, proxy->dimensions);
  
        return &cloneproxy->std;
@@@ -413,16 -431,18 +415,16 @@@ int php_com_saproxy_create(zend_object 
        proxy = ecalloc(1, sizeof(*proxy));
        proxy->dimensions = 1;
  
 -      if (Z_OBJCE_P(com_object) == php_com_saproxy_class_entry) {
 -              rel = SA_FETCH(com_object);
 +      if (com_object->ce == php_com_saproxy_class_entry) {
 +              rel = (php_com_saproxy*) com_object;
                proxy->obj = rel->obj;
 -              proxy->zobj = rel->zobj;
                proxy->dimensions += rel->dimensions;
        } else {
 -              proxy->obj = CDNO_FETCH(com_object);
 -              proxy->zobj = com_object;
 +              proxy->obj = (php_com_dotnet_object*) com_object;
        }
  
 -      Z_ADDREF_P(proxy->zobj);
 +      GC_ADDREF(&proxy->obj->zo);
-       proxy->indices = safe_emalloc(proxy->dimensions, sizeof(zval *), 0);
+       proxy->indices = safe_emalloc(proxy->dimensions, sizeof(zval), 0);
  
        if (rel) {
                clone_indices(proxy, rel, rel->dimensions);