]> granicus.if.org Git - php/commitdiff
MFH
authorHarald Radi <phanto@php.net>
Thu, 18 Apr 2002 10:15:33 +0000 (10:15 +0000)
committerHarald Radi <phanto@php.net>
Thu, 18 Apr 2002 10:15:33 +0000 (10:15 +0000)
ext/com/COM.c
ext/com/conversion.c
ext/rpc/com/com_wrapper.c
ext/rpc/com/conversion.c

index 854bd6be1331adbde86bdb7f5675e7fe17759b5a..92128ad0c2e654c56cc4211d3e8153dded1cb5fc 100644 (file)
@@ -133,18 +133,20 @@ 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 +161,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 358314f132d0651a2a554e9a3b7d64d790d20cf0..a0005e62000a1ee7a478dbb70e035b29cb9194af 100644 (file)
@@ -380,8 +380,7 @@ PHPAPI void php_pval_to_variant_ex2(pval *pval_arg, VARIANT *var_arg, int type,
                        /*
                                should be, but isn't :)
 
-                               if (V_VT(var_arg) != (VT_VARIANT|VT_BYREF))
-                               {
+                               if (V_VT(var_arg) != (VT_VARIANT|VT_BYREF)) {
                                        VariantInit(var_arg);
                                }
                        */
@@ -631,14 +630,22 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TS
                        break;
 
                case VT_BSTR:
+                       Z_TYPE_P(pval_arg) = IS_STRING;
+
                        if (V_ISBYREF(var_arg)) {
-                               Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(*V_BSTRREF(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
+                               if (*V_BSTR(var_arg)) {
+                                       Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(*V_BSTRREF(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
+                               } else {
+                                       ZVAL_NULL(pval_arg);
+                               }
                                efree(V_BSTRREF(var_arg));
                        } else {
-                               Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(V_BSTR(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
+                               if (V_BSTR(var_arg)) {
+                                       Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(V_BSTR(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
+                               } else {
+                                       ZVAL_NULL(pval_arg);
+                               }
                        }
-
-                       Z_TYPE_P(pval_arg) = IS_STRING;
                        break;
 
                case VT_DATE: {
@@ -679,8 +686,7 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TS
 
                                hr = V_UNKNOWN(var_arg)->lpVtbl->QueryInterface(var_arg->punkVal, &IID_IDispatch, &V_DISPATCH(var_arg));
 
-                               if (FAILED(hr))
-                               {
+                               if (FAILED(hr)) {
                                        char *error_message;
 
                                        error_message = php_COM_error_message(hr TSRMLS_CC);
@@ -844,4 +850,4 @@ static void comval_to_variant(pval *pval_arg, VARIANT *var_arg TSRMLS_DC)
        }
 }
 
-#endif /* PHP_WIN32 */
\ No newline at end of file
+#endif /* PHP_WIN32 */
index 854bd6be1331adbde86bdb7f5675e7fe17759b5a..92128ad0c2e654c56cc4211d3e8153dded1cb5fc 100644 (file)
@@ -133,18 +133,20 @@ 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 +161,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 358314f132d0651a2a554e9a3b7d64d790d20cf0..a0005e62000a1ee7a478dbb70e035b29cb9194af 100644 (file)
@@ -380,8 +380,7 @@ PHPAPI void php_pval_to_variant_ex2(pval *pval_arg, VARIANT *var_arg, int type,
                        /*
                                should be, but isn't :)
 
-                               if (V_VT(var_arg) != (VT_VARIANT|VT_BYREF))
-                               {
+                               if (V_VT(var_arg) != (VT_VARIANT|VT_BYREF)) {
                                        VariantInit(var_arg);
                                }
                        */
@@ -631,14 +630,22 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TS
                        break;
 
                case VT_BSTR:
+                       Z_TYPE_P(pval_arg) = IS_STRING;
+
                        if (V_ISBYREF(var_arg)) {
-                               Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(*V_BSTRREF(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
+                               if (*V_BSTR(var_arg)) {
+                                       Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(*V_BSTRREF(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
+                               } else {
+                                       ZVAL_NULL(pval_arg);
+                               }
                                efree(V_BSTRREF(var_arg));
                        } else {
-                               Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(V_BSTR(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
+                               if (V_BSTR(var_arg)) {
+                                       Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(V_BSTR(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC);
+                               } else {
+                                       ZVAL_NULL(pval_arg);
+                               }
                        }
-
-                       Z_TYPE_P(pval_arg) = IS_STRING;
                        break;
 
                case VT_DATE: {
@@ -679,8 +686,7 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TS
 
                                hr = V_UNKNOWN(var_arg)->lpVtbl->QueryInterface(var_arg->punkVal, &IID_IDispatch, &V_DISPATCH(var_arg));
 
-                               if (FAILED(hr))
-                               {
+                               if (FAILED(hr)) {
                                        char *error_message;
 
                                        error_message = php_COM_error_message(hr TSRMLS_CC);
@@ -844,4 +850,4 @@ static void comval_to_variant(pval *pval_arg, VARIANT *var_arg TSRMLS_DC)
        }
 }
 
-#endif /* PHP_WIN32 */
\ No newline at end of file
+#endif /* PHP_WIN32 */