summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Brown <abrown@php.net>2001-11-09 14:20:28 +0000
committerAlan Brown <abrown@php.net>2001-11-09 14:20:28 +0000
commit8ee38d9d75f02b604106887b2548d30b7c913414 (patch)
treeb8b2b805edd632c0649f062ad65884e6852f5b54
parent58abda0e58eb7f2bab190c528df0856d9d00ccf9 (diff)
downloadphp-git-8ee38d9d75f02b604106887b2548d30b7c913414.tar.gz
Not all components populate every field in the ExceptInfo structure. Thus we sometimes would try to convert NULL strings and see php_OLECHAR_to_char errors while displaying Exception information. This version is a little smarter about the member derefencing and the resulting error string.
-rw-r--r--ext/com/COM.c30
-rw-r--r--ext/rpc/com/com_wrapper.c30
2 files changed, 42 insertions, 18 deletions
diff --git a/ext/com/COM.c b/ext/com/COM.c
index 794a71ae16..01665528df 100644
--- a/ext/com/COM.c
+++ b/ext/com/COM.c
@@ -133,20 +133,32 @@ PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DIS
if (FAILED(hr)) {
switch (hr) {
case DISP_E_EXCEPTION: {
- int srclen;
- char *src = php_OLECHAR_to_char(ExceptInfo.bstrSource, &srclen, codepage TSRMLS_CC);
- int desclen;
- char *desc = php_OLECHAR_to_char(ExceptInfo.bstrDescription, &desclen, codepage TSRMLS_CC);
-
+ int srclen=0;
+ char *src=estrdup("");
+ int desclen=0;
+ char *desc=estrdup("");
+
+ if (ExceptInfo.bstrSource)
+ {
+ src = php_OLECHAR_to_char(ExceptInfo.bstrSource, &srclen, codepage TSRMLS_CC);
+ SysFreeString(ExceptInfo.bstrSource);
+ }
+ if (ExceptInfo.bstrDescription)
+ {
+ desc = php_OLECHAR_to_char(ExceptInfo.bstrDescription, &desclen, codepage TSRMLS_CC);
+ SysFreeString(ExceptInfo.bstrDescription);
+ }
+
*ErrString = pemalloc(srclen+desclen+50, 1);
sprintf(*ErrString, "<b>Source</b>: %s <b>Description</b>: %s", src, desc);
efree(src);
efree(desc);
- SysFreeString(ExceptInfo.bstrSource);
- SysFreeString(ExceptInfo.bstrDescription);
- SysFreeString(ExceptInfo.bstrHelpFile);
+
+ if (ExceptInfo.bstrHelpFile)
+ {
+ 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 794a71ae16..01665528df 100644
--- a/ext/rpc/com/com_wrapper.c
+++ b/ext/rpc/com/com_wrapper.c
@@ -133,20 +133,32 @@ PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DIS
if (FAILED(hr)) {
switch (hr) {
case DISP_E_EXCEPTION: {
- int srclen;
- char *src = php_OLECHAR_to_char(ExceptInfo.bstrSource, &srclen, codepage TSRMLS_CC);
- int desclen;
- char *desc = php_OLECHAR_to_char(ExceptInfo.bstrDescription, &desclen, codepage TSRMLS_CC);
-
+ int srclen=0;
+ char *src=estrdup("");
+ int desclen=0;
+ char *desc=estrdup("");
+
+ if (ExceptInfo.bstrSource)
+ {
+ src = php_OLECHAR_to_char(ExceptInfo.bstrSource, &srclen, codepage TSRMLS_CC);
+ SysFreeString(ExceptInfo.bstrSource);
+ }
+ if (ExceptInfo.bstrDescription)
+ {
+ desc = php_OLECHAR_to_char(ExceptInfo.bstrDescription, &desclen, codepage TSRMLS_CC);
+ SysFreeString(ExceptInfo.bstrDescription);
+ }
+
*ErrString = pemalloc(srclen+desclen+50, 1);
sprintf(*ErrString, "<b>Source</b>: %s <b>Description</b>: %s", src, desc);
efree(src);
efree(desc);
- SysFreeString(ExceptInfo.bstrSource);
- SysFreeString(ExceptInfo.bstrDescription);
- SysFreeString(ExceptInfo.bstrHelpFile);
+
+ if (ExceptInfo.bstrHelpFile)
+ {
+ SysFreeString(ExceptInfo.bstrHelpFile);
+ }
}
- break;
case DISP_E_PARAMNOTFOUND:
case DISP_E_TYPEMISMATCH:
*ErrString = pemalloc(25, 1);