Bug 13509 fixed: It was not possible to have an empty prefix with xmlNs 25/14825/2
Calixte DENIZET [Tue, 8 Jul 2014 14:57:01 +0000 (16:57 +0200)]
Change-Id: Id89f3ef555e293faf3505f330b6e269fba067161

scilab/CHANGES_5.5.X
scilab/modules/xml/help/en_US/xmlNs.xml
scilab/modules/xml/help/ja_JP/xmlNs.xml
scilab/modules/xml/sci_gateway/cpp/sci_xmlNs.cpp
scilab/modules/xml/tests/nonreg_tests/bug_13509.dia.ref [new file with mode: 0644]
scilab/modules/xml/tests/nonreg_tests/bug_13509.tst [new file with mode: 0644]

index 47cb80d..831e70d 100644 (file)
@@ -144,6 +144,8 @@ Scilab Bug Fixes
 
 * Bug #13503 fixed - xarrows made Scilab crash in some cases.
 
+* Bug #13509 fixed - It was not possible to have an empty prefix with xmlNs.
+
 
 Xcos Bug Fixes
 ==============
index 18bfd47..b0ea1cd 100644 (file)
@@ -18,7 +18,7 @@
     <refsynopsisdiv>
         <title>Calling Sequence</title>
         <synopsis>
-            ns = xmlNs(elem, [prefix, [, href]])
+            ns = xmlNs(elem, prefix, href)
         </synopsis>
     </refsynopsisdiv>
     <refsection>
@@ -33,7 +33,7 @@
             <varlistentry>
                 <term>prefix</term>
                 <listitem>
-                    <para>a string giving the prefix for this namespace</para>
+                    <para>a string giving the prefix for this namespace or the empty matrix to have an empty prefix</para>
                 </listitem>
             </varlistentry>
             <varlistentry>
index 2cbcd7f..d161f8f 100644 (file)
@@ -18,7 +18,7 @@
     <refsynopsisdiv>
         <title>呼び出し手順</title>
         <synopsis>
-            ns = xmlNs(elem, [prefix, [, href]])
+            ns = xmlNs(elem, prefix, href)
         </synopsis>
     </refsynopsisdiv>
     <refsection>
index 327dbd7..201b2e6 100644 (file)
@@ -34,8 +34,6 @@ int sci_xmlNs(char *fname, unsigned long fname_len)
     XMLElement *elem = 0;
     char *prefix = 0;
     char *href = 0;
-    int i = 0;
-    char **vars[] = { &prefix, &href };
 
     CheckLhs(1, 1);
     CheckRhs(3, 3);
@@ -61,34 +59,74 @@ int sci_xmlNs(char *fname, unsigned long fname_len)
         return 0;
     }
 
-    for (; i < Rhs - 1; i++)
+    err = getVarAddressFromPosition(pvApiCtx, 2, &addr);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 2);
+        return 0;
+    }
+
+    if (isEmptyMatrix(pvApiCtx, addr))
+    {
+        prefix = 0;
+    }
+    else if (isStringType(pvApiCtx, addr) && checkVarDimension(pvApiCtx, addr, 1, 1))
     {
-        err = getVarAddressFromPosition(pvApiCtx, i + 2, &addr);
-        if (err.iErr)
+        if (getAllocatedSingleString(pvApiCtx, addr, &prefix) != 0)
         {
-            printError(&err, 0);
-            Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, i + 2);
+            Scierror(999, _("%s: No more memory.\n"), fname);
             return 0;
         }
+    }
+    else
+    {
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 2);
+        return 0;
+    }
 
-        if (!isStringType(pvApiCtx, addr) || !checkVarDimension(pvApiCtx, addr, 1, 1))
+    err = getVarAddressFromPosition(pvApiCtx, 3, &addr);
+    if (err.iErr)
+    {
+        if (prefix)
         {
-            Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, i + 2);
-            return 0;
+            freeAllocatedSingleString(prefix);
         }
+        printError(&err, 0);
+        Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 3);
+        return 0;
+    }
 
-        if (getAllocatedSingleString(pvApiCtx, addr, vars[i]) != 0)
+    if (!isStringType(pvApiCtx, addr) || !checkVarDimension(pvApiCtx, addr, 1, 1))
+    {
+        if (prefix)
         {
-            Scierror(999, _("%s: No more memory.\n"), fname);
-            return 0;
+            freeAllocatedSingleString(prefix);
+        }
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 3);
+        return 0;
+    }
+
+    if (getAllocatedSingleString(pvApiCtx, addr, &href) != 0)
+    {
+        if (prefix)
+        {
+            freeAllocatedSingleString(prefix);
         }
+        Scierror(999, _("%s: No more memory.\n"), fname);
+        return 0;
     }
 
     ns = new XMLNs(*elem, prefix, href);
 
-    for (i = 0; i < Rhs - 1; i++)
+    if (prefix)
+    {
+        freeAllocatedSingleString(prefix);
+    }
+
+    if (href)
     {
-        freeAllocatedSingleString(*(vars[i]));
+        freeAllocatedSingleString(href);
     }
 
     if (!ns->createOnStack(Rhs + 1, pvApiCtx))
diff --git a/scilab/modules/xml/tests/nonreg_tests/bug_13509.dia.ref b/scilab/modules/xml/tests/nonreg_tests/bug_13509.dia.ref
new file mode 100644 (file)
index 0000000..c49a6d5
--- /dev/null
@@ -0,0 +1,49 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 13509 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13509
+//
+// <-- Short Description -->
+// It was not possible to have an empty prefix with xmlNs
+//
+s = "<root><a/><b/></root>"
+ s  =
+ <root><a/><b/></root>   
+doc = xmlReadStr(s)
+ doc  =
+XML Document
+url: Undefined
+root: XML Element
+ns=xmlNs(doc.root,"","http://name.space");
+xmlAddNs(doc.root.children(1),ns);
+xmlAddNs(doc.root.children(2),ns);
+out = xmlDump(doc); 
+assert_checkequal(out(3), "  <a xmlns:=""http://name.space""/>");
+xmlDelete(doc)
+s = "<root><a/><b/></root>"
+ s  =
+ <root><a/><b/></root>   
+doc = xmlReadStr(s)
+ doc  =
+XML Document
+url: Undefined
+root: XML Element
+ns=xmlNs(doc.root,[],"http://name.space");
+xmlAddNs(doc.root.children(1),ns);
+xmlAddNs(doc.root.children(2),ns);
+out = xmlDump(doc); 
+assert_checkequal(out(3), "  <a xmlns=""http://name.space""/>");
+xmlDelete(doc)
diff --git a/scilab/modules/xml/tests/nonreg_tests/bug_13509.tst b/scilab/modules/xml/tests/nonreg_tests/bug_13509.tst
new file mode 100644 (file)
index 0000000..daeba72
--- /dev/null
@@ -0,0 +1,39 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 13509 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13509
+//
+// <-- Short Description -->
+// It was not possible to have an empty prefix with xmlNs
+//
+
+s = "<root><a/><b/></root>"
+doc = xmlReadStr(s)
+ns=xmlNs(doc.root,"","http://name.space");
+xmlAddNs(doc.root.children(1),ns);
+xmlAddNs(doc.root.children(2),ns);
+out = xmlDump(doc);
+
+assert_checkequal(out(3), "  <a xmlns:=""http://name.space""/>");
+
+xmlDelete(doc)
+
+s = "<root><a/><b/></root>"
+doc = xmlReadStr(s)
+ns=xmlNs(doc.root,[],"http://name.space");
+xmlAddNs(doc.root.children(1),ns);
+xmlAddNs(doc.root.children(2),ns);
+out = xmlDump(doc);
+
+assert_checkequal(out(3), "  <a xmlns=""http://name.space""/>");
+
+xmlDelete(doc)