Module: wine Branch: stable Commit: 53d7327c047a9e05eb736111989592f1bd792d46 URL: https://gitlab.winehq.org/wine/wine/-/commit/53d7327c047a9e05eb736111989592f...
Author: Jason Millard jsm174@gmail.com Date: Wed Feb 8 11:06:24 2023 -0500
vbscript: Fix memory leak in Split().
(cherry picked from commit f8b76d3da549f8f08a0413de438f929702a380af)
---
dlls/vbscript/global.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-)
diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c index 9eac80218fd..af87e4dfb14 100644 --- a/dlls/vbscript/global.c +++ b/dlls/vbscript/global.c @@ -2572,12 +2572,12 @@ static HRESULT Global_Join(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, V
static HRESULT Global_Split(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, VARIANT *res) { - BSTR str, string, delimiter = NULL; + BSTR string, delimiter = NULL; int count, max, mode, len, start, end, ret, delimiterlen = 1; int i, *indices = NULL, *new_indices, indices_max = 8; SAFEARRAYBOUND bounds; SAFEARRAY *sa = NULL; - VARIANT *data, var; + VARIANT *data; HRESULT hres = S_OK;
TRACE("%s %u...\n", debugstr_variant(args), args_cnt); @@ -2685,19 +2685,13 @@ static HRESULT Global_Split(BuiltinDisp *This, VARIANT *args, unsigned args_cnt,
start = 0; for (i = 0; i < count; i++) { - str = SysAllocStringLen(string + start, indices[i] - start); - if (!str) { + V_VT(&data[i]) = VT_BSTR; + V_BSTR(&data[i]) = SysAllocStringLen(string + start, indices[i] - start); + + if (!V_BSTR(&data[i])) { hres = E_OUTOFMEMORY; break; } - V_VT(&var) = VT_BSTR; - V_BSTR(&var) = str; - - hres = VariantCopyInd(data+i, &var); - if(FAILED(hres)) { - SafeArrayUnaccessData(sa); - goto error; - } start = indices[i]+delimiterlen; } SafeArrayUnaccessData(sa);