[libxml2] Fix unability to RelaxNG-validate grammar with choice-based name class



commit ea695ac0d608e79ce7b86804bab64565e85a8866
Author: Jan Pokorný <jpokorny redhat com>
Date:   Fri Aug 9 15:09:22 2019 +0200

    Fix unability to RelaxNG-validate grammar with choice-based name class
    
    Previously, test/relaxng/ambig_name-class2.xml would fail to validate
    against test/relaxng/ambig_name-class2.rng:
    
    > test/relaxng/ambig_name-class2.rng:4:
    >   element attribute: Relax-NG parser error :
    >       Found anyName attribute without oneOrMore ancestor
    > Relax-NG schema test/relaxng/ambig_name-class2.rng failed to compile
    
    Signed-off-by: Jan Pokorný <jpokorny redhat com>

 relaxng.c                              | 5 ++++-
 result/relaxng/ambig_name-class2_err   | 1 +
 result/relaxng/ambig_name-class2_valid | 0
 test/relaxng/ambig_name-class2.rng     | 1 +
 test/relaxng/ambig_name-class2.xml     | 1 +
 5 files changed, 7 insertions(+), 1 deletion(-)
---
diff --git a/relaxng.c b/relaxng.c
index 1c337e3d..268c4e76 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -6395,7 +6395,10 @@ xmlRelaxNGCheckRules(xmlRelaxNGParserCtxtPtr ctxt,
                            NULL, NULL);
             }
             if ((!(flags & XML_RELAXNG_IN_ONEORMORE))
-                && (cur->name == NULL)) {
+                && cur->name == NULL
+                /* following is checking alternative name class readiness
+                   in case it went the "choice" route */
+                && cur->nameClass == NULL) {
                 if (cur->ns == NULL) {
                     xmlRngPErr(ctxt, cur->node, XML_RNGP_ANYNAME_ATTR_ANCESTOR,
                                "Found anyName attribute without oneOrMore ancestor\n",
diff --git a/result/relaxng/ambig_name-class2_err b/result/relaxng/ambig_name-class2_err
new file mode 100644
index 00000000..2c1ba8d3
--- /dev/null
+++ b/result/relaxng/ambig_name-class2_err
@@ -0,0 +1 @@
+./test/relaxng/ambig_name-class2.rng validates
diff --git a/result/relaxng/ambig_name-class2_valid b/result/relaxng/ambig_name-class2_valid
new file mode 100644
index 00000000..e69de29b
diff --git a/test/relaxng/ambig_name-class2.rng b/test/relaxng/ambig_name-class2.rng
new file mode 120000
index 00000000..6cc955c1
--- /dev/null
+++ b/test/relaxng/ambig_name-class2.rng
@@ -0,0 +1 @@
+ambig_name-class.xml
\ No newline at end of file
diff --git a/test/relaxng/ambig_name-class2.xml b/test/relaxng/ambig_name-class2.xml
new file mode 100644
index 00000000..3c1e4e25
--- /dev/null
+++ b/test/relaxng/ambig_name-class2.xml
@@ -0,0 +1 @@
+<foo alpha="all"/>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]