]> granicus.if.org Git - php/commitdiff
Fix #77626: Persistence confusion in php_com_import_typelib()
authorChristoph M. Becker <cmbecker69@gmx.de>
Fri, 15 Feb 2019 17:50:13 +0000 (18:50 +0100)
committerChristoph M. Becker <cmbecker69@gmx.de>
Fri, 15 Feb 2019 17:56:24 +0000 (18:56 +0100)
We apply only the most minimal fix here, and will cater to the
unnecessary re-allocation for PHP-7.4.

We don't need to add a regression test, since bug39606.phpt and
bug77621.phpt already show the misbehavior.

NEWS
ext/com_dotnet/com_typeinfo.c

diff --git a/NEWS b/NEWS
index 852eb976e365261a2beabb29f6a81ce5cd62d918..34c4434c9fb67b607e356d2cf15dfc33f4d39709 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -17,6 +17,7 @@ PHP                                                                        NEWS
 - COM:
   . Fixed bug #77621 (Already defined constants are not properly reported).
     (cmb)
+  . Fixed bug #77626 (Persistence confusion in php_com_import_typelib()). (cmb)
 
 - Mbstring:
   . Fixed bug #77514 (mb_ereg_replace() with trailing backslash adds null byte).
index 6da55f7477aeca35c4821f53a1bc0ef9b8378f36..6925e20379026a525a83c54eef9e4aa6271eeddf 100644 (file)
@@ -184,7 +184,7 @@ PHP_COM_DOTNET_API int php_com_import_typelib(ITypeLib *TL, int mode, int codepa
                                }
 
                                const_name = php_com_olestring_to_string(bstr_ids, &len, codepage);
-                               c.name = zend_string_init(const_name, len, 1);
+                               c.name = zend_string_init(const_name, len, mode & CONST_PERSISTENT);
                                // TODO: avoid reallocation???
                                efree(const_name);
                                if(c.name == NULL) {
@@ -200,7 +200,7 @@ PHP_COM_DOTNET_API int php_com_import_typelib(ITypeLib *TL, int mode, int codepa
                                        if (COMG(autoreg_verbose) && !compare_function(&results, &value, exists)) {
                                                php_error_docref(NULL, E_WARNING, "Type library constant %s is already defined", ZSTR_VAL(c.name));
                                        }
-                                       zend_string_release_ex(c.name, 1);
+                                       zend_string_release_ex(c.name, mode & CONST_PERSISTENT);
                                        ITypeInfo_ReleaseVarDesc(TypeInfo, pVarDesc);
                                        continue;
                                }