Scicos: fix some issues detected by clang-analyzer 77/18877/4
Clément DAVID [Fri, 13 Jan 2017 13:40:45 +0000 (14:40 +0100)]
Change-Id: Iebe6cff96d3f737fb7378cbc453ac27955e4fdc9

scilab/modules/scicos/sci_gateway/cpp/sci_getscicosvars.cpp
scilab/modules/scicos/sci_gateway/cpp/sci_scicosim.cpp
scilab/modules/scicos/src/cpp/Model.cpp
scilab/modules/scicos/src/cpp/XMIResource_save.cpp
scilab/modules/scicos/src/cpp/createblklist.cpp
scilab/modules/scicos/src/cpp/vec2var.cpp

index adfe0a0..b8836c4 100644 (file)
@@ -109,7 +109,7 @@ types::Function::ReturnValue sci_getscicosvars(types::typed_list &in, int _iRetC
         return types::Function::Error;
     }
 
-    bool ok;
+    bool ok = false;
     // Define accepted entries of getscicosvars -please update me-
     const std::vector<const char*> entry
     {
@@ -422,38 +422,38 @@ types::Function::ReturnValue sci_getscicosvars(types::typed_list &in, int _iRetC
 
                 /* Retrieve 'nblk' by import structure */
                 strcpy(field, "nblk");
-                ok = getscicosvarsfromimport(field, &ptr, &nv, &mv) != 0;
+                getscicosvarsfromimport(field, &ptr, &nv, &mv);
                 int nblk = ((int*)ptr)[0];
 
                 /* Retrieve 'ng' by import structure */
                 strcpy(field, "ng");
-                ok = getscicosvarsfromimport(field, &ptr, &nv, &mv) != 0;
+                getscicosvarsfromimport(field, &ptr, &nv, &mv);
                 //int ng = ((int*)ptr)[0];
 
                 /* Retrieve 'xptr' by import structure */
                 strcpy(field, "xptr");
-                ok = getscicosvarsfromimport(field, &ptr, &nv, &mv) != 0;
+                getscicosvarsfromimport(field, &ptr, &nv, &mv);
                 int* xptr = ((int*)ptr);
 
                 /* Retrieve 'zcptr' by import structure */
                 strcpy(field, "zcptr");
-                ok = getscicosvarsfromimport(field, &ptr, &nv, &mv) != 0;
+                getscicosvarsfromimport(field, &ptr, &nv, &mv);
                 int* zcptr = ((int*)ptr);
 
                 /* Retrieve 'x' and 'xd' by import structure */
                 strcpy(field, "x");
-                ok = getscicosvarsfromimport(field, &ptr, &nv, &mv) != 0;
+                getscicosvarsfromimport(field, &ptr, &nv, &mv);
                 double* x = ((double*)ptr);
                 //double* xd = &x[xptr[nblk] - 1];
 
                 /* Retrieve 'g' by import structure */
                 strcpy(field, "g");
-                ok = getscicosvarsfromimport(field, &ptr, &nv, &mv) != 0;
+                getscicosvarsfromimport(field, &ptr, &nv, &mv);
                 double* g = ((double*)ptr);
 
                 /* Retrieve 'funtyp' by import structure */
                 strcpy(field, "funtyp");
-                ok = getscicosvarsfromimport(field, &ptr, &nv, &mv) != 0;
+                getscicosvarsfromimport(field, &ptr, &nv, &mv);
                 //int* funtyp = ((int*)ptr);
 
                 for (int k = 0; k < nblk; ++k)
index 0fcc288..bd32e27 100644 (file)
@@ -1218,7 +1218,6 @@ types::Function::ReturnValue sci_scicosim(types::typed_list &in, int _iRetCount,
     {
         simpar[i] = 0;
     }
-    int solver = static_cast<int>(simpar[5]); // Set 'solver' variable
 
     /******************************
     * Cross variable size checking
@@ -2260,7 +2259,7 @@ types::Function::ReturnValue sci_scicosim(types::typed_list &in, int _iRetCount,
             case 26  :
                 error = _("The number of parameter provided by Scicos blocks is different from what expected by the code generated by the Modelica compiler. You might have relaxed a parameter using FIXED property (i.e., fixed=false) in a Modelica model. This will be corrected in the next version");
                 break;
-                // In this case, you need to turn off the parameter embedded code generation mode by setting 'Modelica_ParEmb=%f' in the Scilab command window, and recompile the Scicos diagram
+            // In this case, you need to turn off the parameter embedded code generation mode by setting 'Modelica_ParEmb=%f' in the Scilab command window, and recompile the Scicos diagram
 
             default  :
                 if (ierr >= 1000)
index f521ca4..c8dc409 100644 (file)
@@ -1,6 +1,6 @@
 /*
- *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- *  Copyright (C) 2014-2016 - Scilab Enterprises - Clement DAVID
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2014-2017 - Scilab Enterprises - Clement DAVID
  *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
  *
@@ -103,6 +103,7 @@ ScicosID Model::createObject(kind_t k)
                 // return the invalid value if the loop counter encounter 2 zeros.
                 if (has_looped_twice)
                 {
+                    delete o;
                     return ScicosID();
                 }
                 else
index ebd1058..ec58021 100644 (file)
@@ -975,6 +975,10 @@ int XMIResource::writePort(xmlTextWriterPtr writer, enum object_properties_t con
     std::vector<int> intArrayValue;
     controller.getObjectProperty(id, PORT, DATATYPE, intArrayValue);
     status = writeDatatype(writer, intArrayValue);
+    if (status == -1)
+    {
+        return status;
+    }
 
     status = xmlTextWriterEndElement(writer);
     if (status == -1)
index be511cc..96162cd 100644 (file)
@@ -34,13 +34,6 @@ extern "C"
 
 #include "createblklist.hxx"
 /*--------------------------------------------------------------------------*/
-//extern void str2sci(char** x, int n, int m); /* core/src/c/str2sci.h */
-//extern void C2F(itosci)();
-//extern void C2F(dtosci)();
-//extern int C2F(scierr)();
-//extern void C2F(vvtosci)();
-//extern int C2F(mktlist)();
-/*--------------------------------------------------------------------------*/
 static types::InternalType* vartosci(void* data, const int rows, const int cols, const int type)
 {
     const int size = rows * cols;
@@ -128,10 +121,10 @@ static types::InternalType* vartosci(void* data, const int rows, const int cols,
 
 types::InternalType* createblklist(const scicos_block* const Blocks, const int flag_imp, const int /*funtyp*/)
 {
-    /* set string of first element of scilab Blocks tlist -please update me- */
     const int fieldCount = 41;
     int size = 0;
 
+    /* set string of first element of scilab Blocks tlist */
     static const char *str_blklst[] = {"scicos_block", "nevprt", "funpt", "type",
                                        "scsptr", "nz", "z", "noz",
                                        "ozsz", "oztyp", "oz", "nx",
@@ -231,7 +224,6 @@ types::InternalType* createblklist(const scicos_block* const Blocks, const int f
 
     /* 5 - scsptr */
     //cast function ptr to double*
-    size = 0;
     if (sizeof(types::InternalType*) >= sizeof(double))
     {
         // store N double values as the function pointer value
index ac0ebd7..7d057cc 100644 (file)
@@ -17,6 +17,7 @@
 #include <string>
 #include <cwchar>
 #include <cstring>
+#include <cassert>
 
 #include "vec2var.hxx"
 
@@ -88,7 +89,7 @@ int decode(const double* const tab, const int tabSize, const int iDims, const in
     {
         // Error case: the input doesn't have enough elements
         Scierror(999, _("%s: Wrong size for input argument #%d: At least %dx%d expected.\n"), vec2varName.c_str(), 1, numberOfDoubleNeeded + 2 + iDims + offset, 1);
-        res->killMe();
+        delete res;
         return -1;
     }
 
@@ -98,6 +99,7 @@ int decode(const double* const tab, const int tabSize, const int iDims, const in
     memcpy(res->get(), buffer, iElements * sizeof(typename T::type));
     delete[] buffer;
 
+    assert(2 + iDims + numberOfDoubleNeeded > 0);
     return 2 + iDims + numberOfDoubleNeeded;
 }