* Bug #9396 fixed - Parameters: add_params() accepted duplicate keys 49/12449/6
Paul BIGNIER [Fri, 6 Sep 2013 10:24:14 +0000 (12:24 +0200)]
Change-Id: I645903408c5f0dbeca11fd0651c787eb44333d50

scilab/CHANGES_5.5.X
scilab/modules/parameters/macros/add_param.sci
scilab/modules/parameters/tests/nonreg_tests/bug_9396.dia.ref [new file with mode: 0644]
scilab/modules/parameters/tests/nonreg_tests/bug_9396.tst [new file with mode: 0644]

index e8c61b9..9b3c1c0 100644 (file)
@@ -372,6 +372,8 @@ Bug fixes
 
 * Bug #9385 fixed - The type checking in trigonometric functions has been added.
 
+* Bug #9396 fixed - add_params accepted duplicate keys.
+
 * Bug #9459 fixed - Default values of the optional plot3d arguments were not documented.
 
 * Bug #9537 fixed - optimbase_configure() only allowed row vectors as initial value.
index fc1c917..df65ebb 100644 (file)
@@ -7,14 +7,22 @@
 // are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 
-function [plist,err] = add_param(list_name,param_name,param_value)
-    [nargout,nargin] = argn();
-    if typeof(list_name)=="plist" then
-        setfield(1,[getfield(1,list_name) param_name],list_name);
-        if nargout==2 then err = %F; end
-        if nargin==3 then list_name(param_name) = param_value; end
+function [plist, err] = add_param(list_name, param_name, param_value)
+    [nargout, nargin] = argn();
+    if typeof(list_name) == "plist" then
+        if ~is_param(list_name, param_name) then
+            setfield(1, [getfield(1, list_name) param_name], list_name);
+            if nargout == 2 then
+                err = %F;
+            end
+            if nargin == 3 then
+                list_name(param_name) = param_value;
+            end
+        else
+            error(sprintf(gettext("%s: Wrong value for input argument #%d: key ""%s"" already defined.\n"), "add_param", 2, param_name));
+        end
     else
-        if nargout==2 then
+        if nargout == 2 then
             err = %T;
         end
         error(sprintf(gettext("%s: Wrong type for input argument #%d: %s expected.\n"), "add_param", 1, "plist"));
diff --git a/scilab/modules/parameters/tests/nonreg_tests/bug_9396.dia.ref b/scilab/modules/parameters/tests/nonreg_tests/bug_9396.dia.ref
new file mode 100644 (file)
index 0000000..87bd9a4
--- /dev/null
@@ -0,0 +1,21 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 9396 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=9396
+//
+// <-- Short Description -->
+// add_params() accepted duplicate keys.
+p = init_param();
+p = add_param(p, "field1", 10);
+// Check that defining the key "field1" again yields an error
+refMsg = msprintf(_("%s: Wrong value for input argument #%d: key ""%s"" already defined.\n"), "add_param", 2, "field1");
+assert_checkerror("p = add_param(p, ''field1'', 10);", refMsg);
diff --git a/scilab/modules/parameters/tests/nonreg_tests/bug_9396.tst b/scilab/modules/parameters/tests/nonreg_tests/bug_9396.tst
new file mode 100644 (file)
index 0000000..27553c4
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 9396 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=9396
+//
+// <-- Short Description -->
+// add_params() accepted duplicate keys.
+
+p = init_param();
+p = add_param(p, "field1", 10);
+// Check that defining the key "field1" again yields an error
+refMsg = msprintf(_("%s: Wrong value for input argument #%d: key ""%s"" already defined.\n"), "add_param", 2, "field1");
+assert_checkerror("p = add_param(p, ''field1'', 10);", refMsg);