basic/qa/basic_coverage/test_split_method.vb |   27 ++++++++++++++++++++++-----
 basic/source/runtime/methods1.cxx            |    6 ++++--
 2 files changed, 26 insertions(+), 7 deletions(-)

New commits:
commit d6b7cc3f7c07b98c90194e8b33cf44b94804b525
Author:     Andreas Heinisch <andreas.heini...@yahoo.de>
AuthorDate: Tue Oct 6 19:22:44 2020 +0200
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Fri Oct 16 12:31:02 2020 +0200

    tdf#123025 - ReDim Preserve fails if array is filled by Split
    
    The Split function sets the datatype of the array to SbxVARIANT instead
    of SbxSTRING preventing any subsequent assignments to the array and to
    the elements itself.
    
    Change-Id: Ib099eee7bfd222c97520ac8970352bcf2b44bc3e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104039
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/basic/qa/basic_coverage/test_split_method.vb 
b/basic/qa/basic_coverage/test_split_method.vb
index d09e8c3e7e3b..8f3701e3d987 100644
--- a/basic/qa/basic_coverage/test_split_method.vb
+++ b/basic/qa/basic_coverage/test_split_method.vb
@@ -6,10 +6,27 @@
 '
 
 Function doUnitTest as Integer
+
+    doUnitTest = 0
+
     ' SPLIT
-    If ( Split( "Hello world" )(1) <> "world" ) Then
-        doUnitTest = 0
-    Else
-        doUnitTest = 1
-    End If
+    If ( Split( "Hello world" )(1) <> "world" ) Then Exit Function
+
+    ' tdf#123025 - split function sets the datatype of the array to empty,
+    ' preventing any subsequent assignments of values to the array and to the 
elements itself.
+    Dim arr(1) As String
+    arr = Split("a/b", "/")
+    If ( arr(0) <> "a" Or arr(1) <> "b" ) Then Exit Function
+    ReDim Preserve arr(1)
+    If ( arr(0) <> "a" Or arr(1) <> "b" ) Then Exit Function
+    ReDim arr(1)
+    If ( arr(0) <> "" Or arr(1) <> "" ) Then Exit Function
+    arr(0) = "a"
+    arr(1) = "b"
+    If ( arr(0) <> "a" Or arr(1) <> "b" ) Then Exit Function
+    ReDim Preserve arr(1)
+    If ( arr(0) <> "a" Or arr(1) <> "b" ) Then Exit Function
+
+    doUnitTest = 1
+
 End Function
diff --git a/basic/source/runtime/methods1.cxx 
b/basic/source/runtime/methods1.cxx
index 807806e4cea8..1dee293ef3cf 100644
--- a/basic/source/runtime/methods1.cxx
+++ b/basic/source/runtime/methods1.cxx
@@ -1627,13 +1627,15 @@ void SbRtl_Split(StarBASIC *, SbxArray & rPar, bool)
         }
     }
 
-    SbxDimArray* pArray = new SbxDimArray( SbxVARIANT );
+    // tdf#123025 - split returns an array of substrings
+    SbxDimArray* pArray = new SbxDimArray( SbxSTRING );
     pArray->unoAddDim32( 0, nArraySize-1 );
 
     // insert parameter(s) into the array
     for(sal_Int32 i = 0 ; i < nArraySize ; i++ )
     {
-        SbxVariableRef xVar = new SbxVariable( SbxVARIANT );
+        // tdf#123025 - split returns an array of substrings
+        SbxVariableRef xVar = new SbxVariable( SbxSTRING );
         xVar->PutString( vRet[i] );
         pArray->Put32( xVar.get(), &i );
     }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to