summaryrefslogtreecommitdiff
path: root/ext/com/COM.c
diff options
context:
space:
mode:
authorAlan Brown <abrown@php.net>2002-04-18 01:56:29 +0000
committerAlan Brown <abrown@php.net>2002-04-18 01:56:29 +0000
commitad9f90a22337442e8a741151bc16d09919bcb75d (patch)
treed6ba1ccf90db1b884cf1e7ef97c50bd51f2c16d4 /ext/com/COM.c
parentbbb133f2924f0bcb2cfcd577c9650e5132f10a0c (diff)
downloadphp-git-ad9f90a22337442e8a741151bc16d09919bcb75d.tar.gz
Missing break; causes fallthrough which actually causes heap corruption in the debugging version despite being just plain wrong. Also placed a default "Unavailable" message when the object does not populate the EXCEPINFO structure. Also removed a minor memory leak.
Diffstat (limited to 'ext/com/COM.c')
-rw-r--r--ext/com/COM.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/ext/com/COM.c b/ext/com/COM.c
index 854bd6be13..29cc740455 100644
--- a/ext/com/COM.c
+++ b/ext/com/COM.c
@@ -133,18 +133,21 @@ PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DIS
if (FAILED(hr)) {
switch (hr) {
case DISP_E_EXCEPTION: {
- int srclen=0;
- char *src=estrdup("");
- int desclen=0;
- char *desc=estrdup("");
+
+ char *src=estrdup("Unavailable");
+ int srclen=strlen(src);
+ char *desc=estrdup("Unavailable");
+ int desclen=strlen(desc);
if (ExceptInfo.bstrSource)
{
+ efree(src);
src = php_OLECHAR_to_char(ExceptInfo.bstrSource, &srclen, codepage TSRMLS_CC);
SysFreeString(ExceptInfo.bstrSource);
}
if (ExceptInfo.bstrDescription)
{
+ efree(desc);
desc = php_OLECHAR_to_char(ExceptInfo.bstrDescription, &desclen, codepage TSRMLS_CC);
SysFreeString(ExceptInfo.bstrDescription);
}
@@ -159,6 +162,7 @@ PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DIS
SysFreeString(ExceptInfo.bstrHelpFile);
}
}
+ break;
case DISP_E_PARAMNOTFOUND:
case DISP_E_TYPEMISMATCH:
*ErrString = pemalloc(25, 1);