From ad9f90a22337442e8a741151bc16d09919bcb75d Mon Sep 17 00:00:00 2001 From: Alan Brown Date: Thu, 18 Apr 2002 01:56:29 +0000 Subject: [PATCH] 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. --- ext/com/COM.c | 12 ++++++++---- 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); -- 2.50.1