Bug fix 15261: Wrong default inserted in struct 65/19465/3
Antoine ELIAS [Sat, 7 Oct 2017 22:14:40 +0000 (00:14 +0200)]
https://bugzilla.scilab.org/15261

Change-Id: I3e620fe64dbba892c1940ddb6ecf171c0b17a9ca

scilab/CHANGES.md
scilab/modules/ast/src/cpp/types/arrayof.cpp
scilab/modules/ast/tests/nonreg_tests/bug_15261.tst [new file with mode: 0644]

index b3067bf..0740db5 100644 (file)
@@ -452,6 +452,7 @@ the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 * [#15243](http://bugzilla.scilab.org/show_bug.cgi?id=15243): `grand(nr, nc, "uin", vmin)` crashed Scilab.
 * [#15249](http://bugzilla.scilab.org/show_bug.cgi?id=15249): `findobj("toto")` yielded an error instead of returning [].
 * [#15260](http://bugzilla.scilab.org/show_bug.cgi?id=15260): `sci2exp` was broken for cells, structures, and all types of hypermatrix.
+* [#15261](http://bugzilla.scilab.org/show_bug.cgi?id=15261): Insertion in struct felt with wrong default value.
 * [#15266](http://bugzilla.scilab.org/show_bug.cgi?id=15266): Wrong default out_mode in `linear_interpn`.
 * [#15273](http://bugzilla.scilab.org/show_bug.cgi?id=15273): The documented order of `eval_cshep2d` second derivatives was wrong.
 * [#15282](http://bugzilla.scilab.org/show_bug.cgi?id=15282): `help_from_sci` could set an xml:id starting with the forbidden `%` character.
index a6a1df5..c6955b1 100644 (file)
@@ -1641,12 +1641,17 @@ ArrayOf<T>* ArrayOf<T>::resize(int* _piDims, int _iDims)
                 int iNewIdx = getIndexWithDims(piIndexes, _piDims, _iDims);
                 pRealData[iNewIdx] = m_pRealData[i];
                 m_pRealData[i] = NULL;
-                T pTemp = getNullValue();
+
                 for (int j = iPreviousNewIdx; j < iNewIdx; ++j)
                 {
-                    pRealData[j] = copyValue(pTemp);
+                    T pTemp = getNullValue();
+                    T pTemp2 = copyValue(pTemp);
+                    pRealData[j] = pTemp2;
+                    if (pTemp != pTemp2)
+                    {
+                        deleteData(pTemp);
+                    }
                 }
-                deleteData(pTemp);
 
                 iPreviousNewIdx = iNewIdx + 1;
             }
@@ -1672,12 +1677,16 @@ ArrayOf<T>* ArrayOf<T>::resize(int* _piDims, int _iDims)
             //}
 
             //fill exceeded with NullValue
-            T pTemp = getNullValue();
             for (int i = iPreviousNewIdx; i < m_iSizeMax; ++i)
             {
-                pRealData[i] = copyValue(pTemp);
+                T pTemp = getNullValue();
+                T pTemp2 = copyValue(pTemp);
+                pRealData[i] = pTemp2;
+                if (pTemp != pTemp2)
+                {
+                    deleteData(pTemp);
+                }
             }
-            deleteData(pTemp);
 
             delete[] piIndexes;
             //delete all array
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_15261.tst b/scilab/modules/ast/tests/nonreg_tests/bug_15261.tst
new file mode 100644 (file)
index 0000000..bea63fd
--- /dev/null
@@ -0,0 +1,20 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017 - ESI - Antoine ELIAS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 15261 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/15261
+//
+// <-- Short Description -->
+// Wrong default inserted in struct
+
+s.t = "Test";
+s(3).t = %pi;
+type(s(2).t)==0