diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2020-03-02 10:46:31 +0100 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2020-03-02 10:46:46 +0100 |
commit | b9843c9418a1325c4e7dfbf678b3e221c815c130 (patch) | |
tree | b1c71c76c28acf9cb0e5fac6298ce527d08782d6 | |
parent | 533633deda78301c58b360841d02c061f2a6106e (diff) | |
parent | 2adf1c4d23467424012db1971d0a0a678d10d782 (diff) | |
download | php-git-b9843c9418a1325c4e7dfbf678b3e221c815c130.tar.gz |
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
Fix #79332: php_istreams are never freed
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | ext/com_dotnet/com_persist.c | 11 | ||||
-rw-r--r-- | ext/com_dotnet/tests/bug79332.phpt | 18 |
3 files changed, 20 insertions, 10 deletions
@@ -17,6 +17,7 @@ PHP NEWS . Fixed bug #79248 (Traversing empty VT_ARRAY throws com_exception). (cmb) . Fixed bug #79299 (com_print_typeinfo prints duplicate variables). (Litiano Moura) + . Fixed bug #79332 (php_istreams are never freed). (cmb) - CURL: . Fixed bug #79019 (Copied cURL handles upload empty file). (cmb) diff --git a/ext/com_dotnet/com_persist.c b/ext/com_dotnet/com_persist.c index f2d60c1e72..3283e59df7 100644 --- a/ext/com_dotnet/com_persist.c +++ b/ext/com_dotnet/com_persist.c @@ -248,13 +248,6 @@ static struct IStreamVtbl php_istream_vtbl = { static void istream_destructor(php_istream *stm) { - if (stm->res) { - zend_resource *res = stm->res; - stm->res = NULL; - zend_list_delete(res); - return; - } - if (stm->refcount > 0) { CoDisconnectObject((IUnknown*)stm, 0); } @@ -268,7 +261,6 @@ static void istream_destructor(php_istream *stm) PHP_COM_DOTNET_API IStream *php_com_wrapper_export_stream(php_stream *stream) { php_istream *stm = (php_istream*)CoTaskMemAlloc(sizeof(*stm)); - zval *tmp; if (stm == NULL) return NULL; @@ -280,8 +272,7 @@ PHP_COM_DOTNET_API IStream *php_com_wrapper_export_stream(php_stream *stream) stm->stream = stream; GC_ADDREF(stream->res); - tmp = zend_list_insert(stm, le_istream); - stm->res = Z_RES_P(tmp); + stm->res = zend_register_resource(stm, le_istream); return (IStream*)stm; } diff --git a/ext/com_dotnet/tests/bug79332.phpt b/ext/com_dotnet/tests/bug79332.phpt new file mode 100644 index 0000000000..45856b5488 --- /dev/null +++ b/ext/com_dotnet/tests/bug79332.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #79332 (php_istreams are never freed) +--SKIPIF-- +<?php +if (!extension_loaded('com_dotnet')) die('com_dotnet extension not available'); +?> +--FILE-- +<?php +$ph = new COMPersistHelper(null); +try { + $ph->LoadFromStream(fopen(__FILE__, 'r')); +} catch (com_exception $ex) { + // use hard-coded message to avoid localization issues + echo "A com_exception has been thrown\n"; +} +?> +--EXPECT-- +A com_exception has been thrown |