]> granicus.if.org Git - php/commitdiff
Missing break; causes fallthrough which actually causes heap corruption in the debugg...
authorAlan Brown <abrown@php.net>
Thu, 18 Apr 2002 01:56:29 +0000 (01:56 +0000)
committerAlan Brown <abrown@php.net>
Thu, 18 Apr 2002 01:56:29 +0000 (01:56 +0000)
ext/com/COM.c
ext/rpc/com/com_wrapper.c

index 854bd6be1331adbde86bdb7f5675e7fe17759b5a..29cc7404556c04e94c6cbe2be56003eedf62c8ee 100644 (file)
@@ -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);
index 854bd6be1331adbde86bdb7f5675e7fe17759b5a..29cc7404556c04e94c6cbe2be56003eedf62c8ee 100644 (file)
@@ -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);