diff options
author | Alan Brown <abrown@php.net> | 2002-04-18 01:56:29 +0000 |
---|---|---|
committer | Alan Brown <abrown@php.net> | 2002-04-18 01:56:29 +0000 |
commit | ad9f90a22337442e8a741151bc16d09919bcb75d (patch) | |
tree | d6ba1ccf90db1b884cf1e7ef97c50bd51f2c16d4 | |
parent | bbb133f2924f0bcb2cfcd577c9650e5132f10a0c (diff) | |
download | php-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.
-rw-r--r-- | ext/com/COM.c | 12 | ||||
-rw-r--r-- | ext/rpc/com/com_wrapper.c | 12 |
2 files changed, 16 insertions, 8 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); diff --git a/ext/rpc/com/com_wrapper.c b/ext/rpc/com/com_wrapper.c index 854bd6be13..29cc740455 100644 --- a/ext/rpc/com/com_wrapper.c +++ b/ext/rpc/com/com_wrapper.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); |