[strsubstr] Leak fixed when used with regexp 09/19509/2
Cedric Delamarre [Wed, 25 Oct 2017 08:32:55 +0000 (10:32 +0200)]
Change-Id: Ie3dec1f222d4a5238034c685f20fb4b059179f6d

scilab/modules/string/src/c/strsubst.c

index 9364e35..f7aab1b 100644 (file)
@@ -263,6 +263,7 @@ wchar_t *wcssub_reg(const wchar_t* _pwstInput, const wchar_t* _pwstSearch, const
     int iJump = 0;
 
     wchar_t* pwstOutput = NULL;
+    wchar_t* result = NULL;
 
     if (_pwstInput == NULL)
     {
@@ -305,7 +306,7 @@ wchar_t *wcssub_reg(const wchar_t* _pwstInput, const wchar_t* _pwstSearch, const
         int i = 0;
         int replaceLen = (int)wcslen(_pwstReplace);
         int finalSize = len;
-        wchar_t* result = NULL;
+
         //compute final size
         for (i = 0; i < iOccurs; ++i)
         {
@@ -334,15 +335,17 @@ wchar_t *wcssub_reg(const wchar_t* _pwstInput, const wchar_t* _pwstSearch, const
         wcscat(result, _pwstReplace);
         //copy part after last occurence
         wcscat(result, _pwstInput + arriEnd[iOccurs - 1]);
-        return result;
     }
     else
     {
         *_piErr = iPcreStatus;
-        return os_wcsdup(_pwstInput);
+        result = os_wcsdup(_pwstInput);
     }
 
-    return NULL;
+    FREE(arriStart);
+    FREE(arriEnd);
+
+    return result;
 }
 /*-------------------------------------------------------------------------------------*/
 wchar_t **wcssubst_reg(const wchar_t** _pwstInput, int _iInputSize, const wchar_t* _pwstSearch, const wchar_t* _pwstReplace, int* _piErr)