[Libreoffice-commits] core.git: Branch 'private/swe/libreoffice-5-2+backports' - basic/source

Vasily Melenchuk Vasily.Melenchuk at cib.de
Mon May 21 23:13:12 UTC 2018


 basic/source/runtime/dllmgr-x64.cxx |   17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

New commits:
commit c4878f9009d41ee9b06d8d408ffcacf50fded61f
Author: Vasily Melenchuk <Vasily.Melenchuk at cib.de>
Date:   Mon May 21 19:47:00 2018 +0300

    tdf#97231: basic: do not use extra wrapping for string marshaling
    
    previous approach did wrap string reference once again, making
    practically "a pointer to pointer to string" so this code was not
    working correctly for RegQueryValueExA WinAPI call.
    
    String is already provided as a reference (see marshalString(), so
    no reason to wrap its reference.
    
    This approach was just copied from from dllmgr-x86.cxx plus some
    minor changes to make both versions similar.
    
    Reviewed-on: https://gerrit.libreoffice.org/54645
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    
    Conflicts:
            basic/source/runtime/dllmgr-x64.cxx
    
    Change-Id: I85065112407de3f078265d2c76437814402eb1b3

diff --git a/basic/source/runtime/dllmgr-x64.cxx b/basic/source/runtime/dllmgr-x64.cxx
index 8f2b0abdef8c..9d95a87a8146 100644
--- a/basic/source/runtime/dllmgr-x64.cxx
+++ b/basic/source/runtime/dllmgr-x64.cxx
@@ -32,6 +32,7 @@
 
 #include <basic/sbx.hxx>
 #include <basic/sbxvar.hxx>
+#include "runtime.hxx"
 #include <osl/thread.h>
 #include <osl/diagnose.h>
 #include <rtl/ref.hxx>
@@ -256,9 +257,15 @@ SbError marshal(
     std::vector< char > & blob, std::size_t offset, MarshalData & data)
 {
     OSL_ASSERT(variable != 0);
-    if (!(variable->GetFlags() & SbxFlagBits::Reference)) {
-        if ((variable->GetType() & SbxARRAY) == 0) {
-            switch (variable->GetType()) {
+
+    SbxDataType eVarType = variable->GetType();
+    bool bByVal = !(variable->GetFlags() & SbxFlagBits::Reference);
+    if( !bByVal && !SbiRuntime::isVBAEnabled() && eVarType == SbxSTRING )
+        bByVal = true;
+
+    if (bByVal) {
+        if ((eVarType & SbxARRAY) == 0) {
+            switch (eVarType) {
             case SbxINTEGER:
                 add(blob, variable->GetInteger(), outer ? 8 : 2, offset);
                 break;
@@ -307,8 +314,8 @@ SbError marshal(
             }
         }
     } else {
-        if ((variable->GetType() & SbxARRAY) == 0) {
-            switch (variable->GetType()) {
+        if ((eVarType & SbxARRAY) == 0) {
+            switch (eVarType) {
             case SbxINTEGER:
             case SbxLONG:
             case SbxSINGLE:


More information about the Libreoffice-commits mailing list