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.kaganski@collabora.com>
diff --git a/basic/qa/basic_coverage/test_split_method.vb b/basic/qa/basic_coverage/test_split_method.vb
index d09e8c3..8f3701e 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 807806e..1dee293 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 );
    }