diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2020-08-04 18:25:50 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2020-08-11 11:26:50 +0200 |
commit | dc108feab8d88f62d7fcba3d2c9a058432463118 (patch) | |
tree | 7d4aac2828f52ca441e1abfd5805ec3782164fb3 /ext/com_dotnet | |
parent | 9d9dffe60aee0fb469ee0d414eca2a5033a7eafc (diff) | |
download | php-git-dc108feab8d88f62d7fcba3d2c9a058432463118.tar.gz |
Fix #48585: com_load_typelib holds reference, fails on second call
Whether the type library is cached is actually irrelevant here; what
matters is that the symbols are imported, and since these are not
cached, we have to import them for every request. And we cannot cache
the symbols, because the import depends on the current codepage, but
the codepage is a `PHP_INI_ALL` setting.
Diffstat (limited to 'ext/com_dotnet')
-rw-r--r-- | ext/com_dotnet/com_com.c | 6 | ||||
-rw-r--r-- | ext/com_dotnet/com_extension.c | 4 |
2 files changed, 3 insertions, 7 deletions
diff --git a/ext/com_dotnet/com_com.c b/ext/com_dotnet/com_com.c index 2eeac4aaf2..af72db63b1 100644 --- a/ext/com_dotnet/com_com.c +++ b/ext/com_dotnet/com_com.c @@ -248,7 +248,7 @@ PHP_FUNCTION(com_create_instance) TL = php_com_load_typelib_via_cache(typelib_name, obj->code_page, &cached); if (TL) { - if (COMG(autoreg_on) && !cached) { + if (COMG(autoreg_on)) { php_com_import_typelib(TL, mode, obj->code_page); } @@ -838,9 +838,7 @@ PHP_FUNCTION(com_load_typelib) php_com_initialize(); pTL = php_com_load_typelib_via_cache(name, codepage, &cached); if (pTL) { - if (cached) { - RETVAL_TRUE; - } else if (php_com_import_typelib(pTL, cs ? CONST_CS : 0, codepage) == SUCCESS) { + if (php_com_import_typelib(pTL, cs ? CONST_CS : 0, codepage) == SUCCESS) { RETVAL_TRUE; } diff --git a/ext/com_dotnet/com_extension.c b/ext/com_dotnet/com_extension.c index 025f6803df..34e1f253e9 100644 --- a/ext/com_dotnet/com_extension.c +++ b/ext/com_dotnet/com_extension.c @@ -252,9 +252,7 @@ static PHP_INI_MH(OnTypeLibFileUpdate) } if ((pTL = php_com_load_typelib_via_cache(typelib_name, COMG(code_page), &cached)) != NULL) { - if (!cached) { - php_com_import_typelib(pTL, mode, COMG(code_page)); - } + php_com_import_typelib(pTL, mode, COMG(code_page)); ITypeLib_Release(pTL); } } |