* Bug 16631 fixed now readonly handle properties are reported as such 78/21678/3
mottelet [Mon, 18 Jan 2021 10:32:01 +0000 (11:32 +0100)]
Change-Id: I55c9d0740f088fb91f06ea672b9732dec017eda0

scilab/CHANGES.md
scilab/modules/graphics/src/c/getHandleProperty/GetHashTable.c
scilab/modules/graphics/src/c/getHandleProperty/SetHashTable.c
scilab/modules/graphics/tests/nonreg_tests/bug_16631.tst [new file with mode: 0644]

index f305e62..f654680 100644 (file)
@@ -426,7 +426,8 @@ Bug Fixes
 * [#16624](https://bugzilla.scilab.org/16624): `fullfile` badly handled any forced final file separator when building a directory's path.
 * [#16626](https://bugzilla.scilab.org/16626): == and <> between libraries were no longer defined.
 * [#16629](https://bugzilla.scilab.org/16629): `interp1`'s documentation did not tell the spline edges conditions ; extrapolation modes were poorly explained. ; the description of the result's size was completely wrong ; x as an option was not documented. A wrong extrapolation value could silently return a wrong result. There was some dead code like `if varargin(5)==%nan`. A bugged error message yielded its own error. When x is implicit, the argument index in error messages could be wrong. `periodic` and `edgevalue` extrapolation modes were not available. `linear` extrapolation was not available for splines. When `xp` is an hypermatrix with `size(xp,1)==1`, the size of the result was irregular/wrong.
-* [#16631](https://bugzilla.scilab.org/16631): Scilab did not start with unsupported locale on macOS.
+* [#16631](https://bugzilla.scilab.org/16631): read-only handle properties were reported as unknown when trying to set them.
+* [#16632](https://bugzilla.scilab.org/16632): Scilab did not start with unsupported locale on macOS.
 * [#16644](https://bugzilla.scilab.org/16644): `input("message:")` yielded a wrong error message about `mprintf` in case of non-interpretable input.
 * [#16654](https://bugzilla.scilab.org/16654): `interp` was leaking memory.
 
index b30aa81..a19b425 100755 (executable)
@@ -32,7 +32,7 @@ static BOOL getHashTableCreated = FALSE;
 /**
  * the get hashtable
  */
-static GetPropertyHashTable *getHashTable = NULL;
+GetPropertyHashTable *getHashTable = NULL;
 
 /**
  * a couple of key (property name) and associated value
index 671cb39..9584547 100755 (executable)
@@ -20,6 +20,7 @@
 /*------------------------------------------------------------------------*/
 #include <string.h>
 #include "SetHashTable.h"
+#include "GetHashTable.h"
 #include "setHandleProperty.h"
 #include "Scierror.h"
 #include "localization.h"
@@ -39,6 +40,11 @@ static BOOL setHashTableCreated = FALSE;
 static SetPropertyHashTable *setHashTable = NULL;
 
 /**
+ * the get hashtable
+ */
+extern GetPropertyHashTable *getHashTable;
+/**
+
 * a couple of key (property name) and associated value
 * (accessor name)
 */
@@ -303,7 +309,14 @@ int callSetProperty(void* _pvCtx, int iObjUID, void* _pvData, int valueType, int
 
     if (accessor == NULL)
     {
-        Scierror(999, _("Unknown property: %s.\n"), propertyName);
+        if (searchGetHashtable(getHashTable, (char*)propertyName) == NULL)
+        {
+            Scierror(999, _("Unknown property: %s.\n"), propertyName);            
+        }
+        else
+        {
+            Scierror(999, _("Read-only property: %s.\n"), propertyName);                        
+        }
         return NULL;
     }
     return accessor(_pvCtx, iObjUID, _pvData, valueType, nbRow, nbCol);
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_16631.tst b/scilab/modules/graphics/tests/nonreg_tests/bug_16631.tst
new file mode 100644 (file)
index 0000000..3db0ef5
--- /dev/null
@@ -0,0 +1,23 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2021 - Stephane Mottelet
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- TEST WITH GRAPHIC -->
+// <-- NO CHECK REF -->
+
+// <-- Non-regression test for bug 16631 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/16631
+//
+// <-- Short Description -->
+// read-only handle properties are considered as unknown
+
+
+cmd = "gcf().type=""foo""";
+message = msprintf(_("Read-only property: %s."),"type");
+assert_checkerror(cmd, message)
+