diff options
| author | Rob Richards <rrichards@php.net> | 2006-02-04 10:57:28 +0000 |
|---|---|---|
| committer | Rob Richards <rrichards@php.net> | 2006-02-04 10:57:28 +0000 |
| commit | a78a0b460cbacf57c659b3ff801abd390093f45a (patch) | |
| tree | 55f0a1326af677ea693c6833b6c84f614d474d0e /ext/com_dotnet | |
| parent | aa1142eded6e52740146fa6b41bbb60c8aeb571c (diff) | |
| download | php-git-a78a0b460cbacf57c659b3ff801abd390093f45a.tar.gz | |
Fixed bug #34272 (empty array onto COM object blows up)
fix mem leaks
WS fixes
add test
Diffstat (limited to 'ext/com_dotnet')
| -rw-r--r-- | ext/com_dotnet/com_handlers.c | 2 | ||||
| -rw-r--r-- | ext/com_dotnet/com_variant.c | 2 | ||||
| -rw-r--r-- | ext/com_dotnet/tests/bug34272.phpt | 22 |
3 files changed, 25 insertions, 1 deletions
diff --git a/ext/com_dotnet/com_handlers.c b/ext/com_dotnet/com_handlers.c index 0fb3787c88..04c771c9d6 100644 --- a/ext/com_dotnet/com_handlers.c +++ b/ext/com_dotnet/com_handlers.c @@ -634,9 +634,11 @@ void php_com_object_free_storage(void *object TSRMLS_DC) VariantClear(&obj->v); if (obj->method_cache) { + zend_hash_destroy(obj->method_cache); FREE_HASHTABLE(obj->method_cache); } if (obj->id_of_name_cache) { + zend_hash_destroy(obj->id_of_name_cache); FREE_HASHTABLE(obj->id_of_name_cache); } efree(obj); diff --git a/ext/com_dotnet/com_variant.c b/ext/com_dotnet/com_variant.c index 56e643efbd..ae350fe1d8 100644 --- a/ext/com_dotnet/com_variant.c +++ b/ext/com_dotnet/com_variant.c @@ -40,7 +40,7 @@ static void safe_array_from_zval(VARIANT *v, zval *z, int codepage TSRMLS_DC) int keytype; char *strindex; int strindexlen; - long intindex; + long intindex = -1; long max_index = 0; VARIANT *va; zval **item; diff --git a/ext/com_dotnet/tests/bug34272.phpt b/ext/com_dotnet/tests/bug34272.phpt new file mode 100644 index 0000000000..3a65e2ce28 --- /dev/null +++ b/ext/com_dotnet/tests/bug34272.phpt @@ -0,0 +1,22 @@ +--TEST-- +Bug #34272 (empty array onto COM object blows up) +--SKIPIF-- +<?php +if (!extension_loaded("com_dotnet")) print "skip COM/.Net support not present"; ?> +--FILE-- +<?php +error_reporting(E_ALL); + +try { + $dict = new COM("Scripting.Dictionary"); + $dict->add('foo', array()); + print sizeof($dict['foo'])."\n"; + $dict->add('bar', array(23)); + print sizeof($dict['bar'])." \n"; +} catch (Exception $e) { + print $e; +} +?> +--EXPECT-- +0 +1 |
