com php-src: Fixed bug #72922 COM called from PHP does not return out parameters: NEWS ext/com_dotnet/com_com.c ext/com_dot net/com_handlers.c

From: Date: Thu, 25 Aug 2016 10:12:45 +0000
Subject: com php-src: Fixed bug #72922 COM called from PHP does not return out parameters: NEWS ext/com_dotnet/com_com.c ext/com_dot net/com_handlers.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-94059@lists.php.net to get a copy of this message
Commit: 392c5ea472145a8f15b78376d0ab155b16bbab43 Author: Anatol Belski <ab@php.net> Thu, 25 Aug 2016 12:12:45 +0200 Parents: 4c13a7f5c4d0fcbfdd6cd60d84bc88f7c34bfb4f Branches: PHP-7.0 PHP-7.1 master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=392c5ea472145a8f15b78376d0ab155b16bbab43 Log: Fixed bug #72922 COM called from PHP does not return out parameters Bugs: https://bugs.php.net/72922 Changed paths: M NEWS M ext/com_dotnet/com_com.c M ext/com_dotnet/com_handlers.c Diff: diff --git a/NEWS b/NEWS index 20e24b4..c2c6e2d 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,10 @@ PHP NEWS . Fixed bug #72854 (PHP Crashes on duplicate destructor call). (Nikita) . Fixed bug #72857 (stream_socket_recvfrom read access violation). (Anatol) +- COM: + . Fixed bug #72922 (COM called from PHP does not return out parameters). + (Anatol) + - FTP: . Fixed bug #70195 (Cannot upload file using ftp_put to FTPES with require_ssl_reuse). (Benedict Singer) diff --git a/ext/com_dotnet/com_com.c b/ext/com_dotnet/com_com.c index bb87d8f..ec1c721 100644 --- a/ext/com_dotnet/com_com.c +++ b/ext/com_dotnet/com_com.c @@ -553,7 +553,10 @@ int php_com_do_invoke_byref(php_com_dotnet_object *obj, zend_internal_function * for (i = 0, j = 0; i < nargs; i++) { /* if this was byref, update the zval */ if (f->arg_info[nargs - i - 1].pass_by_reference) { - SEPARATE_ZVAL_IF_NOT_REF(&args[nargs - i - 1]); + zval *arg = &args[nargs - i - 1]; + + ZVAL_DEREF(arg); + SEPARATE_ZVAL_NOREF(arg); /* if the variant is pointing at the byref_vals, we need to map * the pointee value as a zval; otherwise, the value is pointing @@ -561,14 +564,12 @@ int php_com_do_invoke_byref(php_com_dotnet_object *obj, zend_internal_function * if (V_VT(&vargs[i]) & VT_BYREF) { if (vargs[i].byref == &V_UINT(&byref_vals[j])) { /* copy that value */ - php_com_zval_from_variant(&args[nargs - i - 1], &byref_vals[j], - obj->code_page); + php_com_zval_from_variant(arg, &byref_vals[j], obj->code_page); } } else { /* not sure if this can ever happen; the variant we marked as BYREF * is no longer BYREF - copy its value */ - php_com_zval_from_variant(&args[nargs - i - 1], &vargs[i], - obj->code_page); + php_com_zval_from_variant(arg, &vargs[i], obj->code_page); } VariantClear(&byref_vals[j]); j++; diff --git a/ext/com_dotnet/com_handlers.c b/ext/com_dotnet/com_handlers.c index 122c618..415fcb9 100644 --- a/ext/com_dotnet/com_handlers.c +++ b/ext/com_dotnet/com_handlers.c @@ -305,7 +305,8 @@ static union _zend_function *com_method_get(zend_object **object_ptr, zend_strin for (i = 0; i < bindptr.lpfuncdesc->cParams; i++) { f.arg_info[i]..allow_null = 1; if (bindptr.lpfuncdesc->lprgelemdescParam[i].paramdesc.wParamFlags & PARAMFLAG_FOUT) { - f.arg_info[i].pass_by_reference = 1; + f.arg_info[i].pass_by_reference = ZEND_SEND_BY_REF; + ZEND_SET_ARG_FLAG(fptr, i + 1, ZEND_SEND_BY_REF); } }

« previous php.cvs (#94059) next »