From bbb133f2924f0bcb2cfcd577c9650e5132f10a0c Mon Sep 17 00:00:00 2001 From: Alan Brown Date: Thu, 18 Apr 2002 01:52:07 +0000 Subject: [PATCH] When V_BSTR() is NULL, we pass a NULL pointer into php_OLECHAR_to_char() which reports an exception. Better to map a NULL string pointer to ZVAL_NULL. --- ext/com/conversion.c | 32 ++++++++++++++++++++++++++------ ext/rpc/com/conversion.c | 32 ++++++++++++++++++++++++++------ 2 files changed, 52 insertions(+), 12 deletions(-) diff --git a/ext/com/conversion.c b/ext/com/conversion.c index 358314f132..cd947fb72d 100644 --- a/ext/com/conversion.c +++ b/ext/com/conversion.c @@ -631,14 +631,34 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TS break; case VT_BSTR: - 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_ISBYREF(var_arg)) + { + 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); + Z_TYPE_P(pval_arg) = IS_STRING; + } + else + { + ZVAL_NULL(pval_arg); + Z_TYPE_P(pval_arg) = IS_NULL; + } 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); + } + else + { + 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); + Z_TYPE_P(pval_arg) = IS_STRING; + } + else + { + ZVAL_NULL(pval_arg); + Z_TYPE_P(pval_arg) = IS_NULL; + } } - Z_TYPE_P(pval_arg) = IS_STRING; break; case VT_DATE: { @@ -844,4 +864,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 */ diff --git a/ext/rpc/com/conversion.c b/ext/rpc/com/conversion.c index 358314f132..cd947fb72d 100644 --- a/ext/rpc/com/conversion.c +++ b/ext/rpc/com/conversion.c @@ -631,14 +631,34 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TS break; case VT_BSTR: - 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_ISBYREF(var_arg)) + { + 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); + Z_TYPE_P(pval_arg) = IS_STRING; + } + else + { + ZVAL_NULL(pval_arg); + Z_TYPE_P(pval_arg) = IS_NULL; + } 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); + } + else + { + 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); + Z_TYPE_P(pval_arg) = IS_STRING; + } + else + { + ZVAL_NULL(pval_arg); + Z_TYPE_P(pval_arg) = IS_NULL; + } } - Z_TYPE_P(pval_arg) = IS_STRING; break; case VT_DATE: { @@ -844,4 +864,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 */ -- 2.50.1