summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorRob Richards <rrichards@php.net>2006-02-04 10:57:28 +0000
committerRob Richards <rrichards@php.net>2006-02-04 10:57:28 +0000
commita78a0b460cbacf57c659b3ff801abd390093f45a (patch)
tree55f0a1326af677ea693c6833b6c84f614d474d0e /ext
parentaa1142eded6e52740146fa6b41bbb60c8aeb571c (diff)
downloadphp-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')
-rw-r--r--ext/com_dotnet/com_handlers.c2
-rw-r--r--ext/com_dotnet/com_variant.c2
-rw-r--r--ext/com_dotnet/tests/bug34272.phpt22
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