Coverity: Localization module Resource Leaks fixed 35/18135/4
Dhruv Khattar [Tue, 3 May 2016 10:57:35 +0000 (15:57 +0530)]
Change-Id: I2a83788a275a31486742dc1c35a72b1dbc7a23b8

scilab/modules/localization/sci_gateway/c/sci_addlocalizationdomain.c
scilab/modules/localization/sci_gateway/c/sci_gettext.c
scilab/modules/localization/src/c/InitializeLocalization.c
scilab/modules/localization/src/c/charEncoding.c
scilab/modules/localization/src/cpp/UTF8.cpp

index 3280d3e..c391dbc 100644 (file)
@@ -70,18 +70,21 @@ int sci_addlocalizationdomain(char *fname, void* pvApiCtx)
     {
         printError(&sciErr, 0);
         Scierror(999, _("%s: Can not read input argument #%d.\n"), "addlocalizationdomain", 2);
+        freeAllocatedSingleString(pstDomain);
         return 0;
     }
 
     if (isStringType(pvApiCtx, piAddr2) == 0 || isScalar(pvApiCtx, piAddr2) == 0)
     {
         Scierror(999, _("%s: Wrong size for input argument #%d: String expected.\n"), "addlocalizationdomain", 2);
+        freeAllocatedSingleString(pstDomain);
         return 0;
     }
 
     if (getAllocatedSingleString(pvApiCtx, piAddr2, &pstPath))
     {
         Scierror(999, _("%s: Memory allocation error.\n"), "addlocalizationdomain");
+        freeAllocatedSingleString(pstDomain);
         return 0;
     }
 
index 09f41dd..00bd8db 100644 (file)
@@ -82,21 +82,24 @@ int sci_gettext(char *fname, void* pvApiCtx)
     if (isStringType(pvApiCtx, piAddressVarOne) == 0)
     {
         Scierror(999, _("%s: Wrong type for input argument #%d: String expected.\n"), fname, 1);
+        freeAllocatedSingleString(pstDomain);
         return 0;
     }
 
     if (getAllocatedMatrixOfString(pvApiCtx, piAddressVarOne, &m, &n, &StringsToTranslate) != 0)
     {
         Scierror(999, _("%s: No more memory.\n"), fname);
+        freeAllocatedSingleString(pstDomain);
         return 0;
     }
 
     TranslatedStrings = (char **)MALLOC(sizeof(char*) * (m * n));
     if (TranslatedStrings == NULL)
     {
+        Scierror(999, _("%s: No more memory.\n"), fname);
+        freeAllocatedSingleString(pstDomain);
         freeAllocatedMatrixOfString(m, n, StringsToTranslate);
         StringsToTranslate = NULL;
-        Scierror(999, _("%s: No more memory.\n"), fname);
         return 0;
     }
 
@@ -113,6 +116,7 @@ int sci_gettext(char *fname, void* pvApiCtx)
         }
     }
 
+    freeAllocatedSingleString(pstDomain);
     freeAllocatedMatrixOfString(m, n, StringsToTranslate);
     StringsToTranslate = NULL;
 
index 9cc0058..f82ad82 100644 (file)
@@ -120,17 +120,17 @@ BOOL InitializeLocalization(void)
             FREE(previousPathLocales);
             previousPathLocales = NULL;
         }
-        if (pathLocales)
-        {
-            FREE(pathLocales);
-            pathLocales = NULL;
-        }
-        if (SCIpath)
-        {
-            FREE(SCIpath);
-            SCIpath = NULL;
-        }
+    }
 
+    if (SCIpath)
+    {
+        FREE(SCIpath);
+        SCIpath = NULL;
+    }
+    if (pathLocales)
+    {
+        FREE(pathLocales);
+        pathLocales = NULL;
     }
 
     /* set domain for future gettext() calls */
@@ -138,7 +138,6 @@ BOOL InitializeLocalization(void)
     if (ret == NULL)
     {
         fprintf(stderr, "Localization: Error while declaring the text domain %s\n", NAMELOCALIZATIONDOMAIN);
-        FREE(pathLocales);
         return FALSE;
     }
     bind_textdomain_codeset (NAMELOCALIZATIONDOMAIN, "UTF-8"); /*such that gettext and dgettext return UTF8 string*/
@@ -167,16 +166,6 @@ BOOL InitializeLocalization(void)
 #endif
     }
 #endif
-
-    if (pathLocales)
-    {
-        FREE(pathLocales);
-    }
-    if (SCIpath)
-    {
-        FREE(SCIpath);
-    }
-
     return TRUE;
 #else
     fprintf(stderr, "Localization: setlocale didn't exist on the computer used to compile Scilab ! This is abnormal ! No localization will be working for this distribution of Scilab.\n");
index f186dfa..24c0f31 100644 (file)
@@ -218,6 +218,7 @@ char *wide_string_to_UTF8(const wchar_t *_wide)
     iconv_close(cd_UTF16_to_UTF8);
     if (iSize == (size_t)(-1))
     {
+        FREE(pOutSave);
         return NULL;
     }
 
index efc0037..9914b70 100644 (file)
@@ -218,6 +218,7 @@ std::wstring UTF8::toWide(const std::string & str)
         iconv_close(cd);
         if (iSize == (size_t)(-1))
         {
+            delete[] pOutSave;
             return std::wstring();
         }
     }