Coverity: api_scilab module memory errors fixed 28/18228/3
Dhruv Khattar [Tue, 7 Jun 2016 20:07:49 +0000 (01:07 +0530)]
Change-Id: If76c297bcea083fc619d660fbc95cd61fa02662d

scilab/modules/api_scilab/includes/api_variable.hxx
scilab/modules/api_scilab/src/cpp/api_stack_common.cpp
scilab/modules/api_scilab/src/cpp/api_stack_hypermat.cpp
scilab/modules/api_scilab/src/cpp/api_stack_string.cpp
scilab/modules/api_scilab/src/cpp/template/api_poly.hpp

index 7717e45..11eb254 100644 (file)
@@ -65,7 +65,7 @@ protected :
     XType* data;
 
 public :
-    VariableT() {};
+    VariableT(): data(nullptr) {};
     virtual ~VariableT() {};
 
     virtual void* getReturnVariable()
index 785b091..ff7b928 100644 (file)
@@ -586,7 +586,7 @@ SciErr getNamedVarType(void *_pvCtx, const char *_pstName, int *_piType)
 /*--------------------------------------------------------------------------*/
 int isVarComplex(void *_pvCtx, int *_piAddress)
 {
-    SciErr sciErr;
+    SciErr sciErr = sciErrInit();
     int iType = 0;
     int iComplex = 0;
 
index c1861ca..8d9e0b8 100644 (file)
@@ -183,6 +183,7 @@ SciErr getHypermatOfDouble(void* _pvCtx, int* _piAddress, int **_dims, int *_ndi
     if (ret || entries == NULL || ((types::InternalType*)entries)->isDouble() == false)
     {
         addErrorMessage(&sciErr, API_ERROR_GET_DOUBLE, _("%s: Unable to get argument #%d"), "getHypermatOfDouble", getRhsFromAddress(_pvCtx, _piAddress));
+        return sciErr;
     }
 
     types::Double* d = (types::Double*)entries;
@@ -201,6 +202,7 @@ SciErr getComplexHypermatOfDouble(void* _pvCtx, int* _piAddress, int **_dims, in
     if (ret || entries == NULL || ((types::InternalType*)entries)->isDouble() == false)
     {
         addErrorMessage(&sciErr, API_ERROR_GET_DOUBLE, _("%s: Unable to get argument #%d"), "getHypermatOfDouble", getRhsFromAddress(_pvCtx, _piAddress));
+        return sciErr;
     }
 
     types::Double* d = (types::Double*)entries;
index becdfe7..f9197d6 100644 (file)
@@ -159,9 +159,7 @@ SciErr createMatrixOfString(void* _pvCtx, int _iVar, int _iRows, int _iCols, con
 /*--------------------------------------------------------------------------*/
 SciErr createNamedMatrixOfString(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const char* const* _pstStrings)
 {
-    SciErr sciErr;
-    sciErr.iErr = 0;
-    sciErr.iMsgCount = 0;
+    SciErr sciErr = sciErrInit();
 
     // check variable name
     if (checkNamedVarFormat(_pvCtx, _pstName) == 0)
@@ -803,12 +801,12 @@ int allocSingleString(void* _pvCtx, int _iVar, int _iLen, const char** _pstStrin
     char* pstStrings = new char[_iLen];
 
     memset(pstStrings, ' ', _iLen);
-    _pstStrings[0] = pstStrings;
     if (_pstStrings == NULL)
     {
         addErrorMessage(&sciErr, API_ERROR_NO_MORE_MEMORY, _("%s: No more memory to allocate variable"), "allocSingleString");
         return sciErr.iErr;
     }
+    _pstStrings[0] = pstStrings;
 
     pStr = new types::String(pstStrings);
 
index a9a2570..e461bfd 100644 (file)
@@ -74,7 +74,7 @@ int API_PROTO(getPolyVarname)(scilabEnv env, scilabVar var, const wchar_t** varn
 #endif
 
     std::wstring v = p->getVariableName();
-    *varname = v.data();
+    *varname = wcsdup(v.data());
     return STATUS_OK;
 }