From 9332b48f16123cac16a207425b3a0206e5da35c1 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Wed, 23 Sep 2009 18:28:43 +0200 Subject: [PATCH] Fix a Relaxng bug raised by libvirt test suite * xmlregexp.c: other fixes in 2.7.4 raised this internal error when comparing ranges, this affects among others detection of the determinism * test/relaxng/libvirt* result/relaxng/libvirt*: add a test case based on libvirt schemas and tests --- result/relaxng/libvirt_0 | 0 result/relaxng/libvirt_0.err | 1 + result/relaxng/libvirt_err | 1 + result/relaxng/libvirt_valid | 0 test/relaxng/libvirt.rng | 1258 ++++++++++++++++++++++++++++++++++ test/relaxng/libvirt_0.xml | 23 + xmlregexp.c | 11 +- 7 files changed, 1289 insertions(+), 5 deletions(-) create mode 100644 result/relaxng/libvirt_0 create mode 100644 result/relaxng/libvirt_0.err create mode 100644 result/relaxng/libvirt_err create mode 100644 result/relaxng/libvirt_valid create mode 100644 test/relaxng/libvirt.rng create mode 100644 test/relaxng/libvirt_0.xml diff --git a/result/relaxng/libvirt_0 b/result/relaxng/libvirt_0 new file mode 100644 index 00000000..e69de29b diff --git a/result/relaxng/libvirt_0.err b/result/relaxng/libvirt_0.err new file mode 100644 index 00000000..29535b86 --- /dev/null +++ b/result/relaxng/libvirt_0.err @@ -0,0 +1 @@ +./test/relaxng/libvirt_0.xml validates diff --git a/result/relaxng/libvirt_err b/result/relaxng/libvirt_err new file mode 100644 index 00000000..4acf3edf --- /dev/null +++ b/result/relaxng/libvirt_err @@ -0,0 +1 @@ +./test/relaxng/libvirt.rng validates diff --git a/result/relaxng/libvirt_valid b/result/relaxng/libvirt_valid new file mode 100644 index 00000000..e69de29b diff --git a/test/relaxng/libvirt.rng b/test/relaxng/libvirt.rng new file mode 100644 index 00000000..c1f586e7 --- /dev/null +++ b/test/relaxng/libvirt.rng @@ -0,0 +1,1258 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dynamic + static + + + + + + + + + + + xen + kvm + kqemu + qemu + lxc + openvz + test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + i686 + x86_64 + ia64 + + + + + + + xenpv + xenner + + + + + xen + linux + + + + + + + + + + + + + + hvm + + + + + + + i686 + x86_64 + + + + + xenfv + pc + isapc + + + + + + + + mips + + + mips + + + + + + + sparc + + + sun4m + + + + + + + ppc + + + + g3beige + mac99 + prep + + + + + + + + exe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localtime + utc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hd + fd + cdrom + network + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + floppy + disk + cdrom + + + + + + + file + + + + + + + + + + + + + + + + block + + + + + + + + + + + + + + + + + + + + + + + + + + ide + fdc + scsi + virtio + xen + usb + uml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + none + writeback + writethrough + + + + + + + + + file + + + + + + + + + + + + + + block + + + + + + + + + + + + + + mount + + + + + + + + + + + + + + template + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bridge + + + + + + + + + + + + + + + + ethernet + + + + + + + + + + + + + + + + network + + + + + + + + + + + + + + user + + + + + + + + internal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sdl + + + + + + + + + + + + + + + yes + no + + + + + + + vnc + + + + + + + + + + yes + no + + + + + + + + + + + + + + + + + + + + + + rdp + + + + + + + + + + yes + no + + + + + + + yes + no + + + + + + + yes + no + + + + + + + + + + + + desktop + + + + + + + + + + yes + no + + + + + + + + + + + + + + + vga + cirrus + vmvga + xen + vbox + + + + + + + + + + + + + + + + + + yes + no + + + + + + + yes + no + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + destroy + restart + preserve + rename-restart + + + + + + + dev + file + pipe + unix + tcp + udp + null + stdio + vc + pty + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sb16 + es1370 + pcspk + ac97 + + + + + + + + + + + + + + + + + + + tablet + mouse + + + + + + ps2 + usb + xen + + + + + + + + + + + subsystem + capabilities + + + + + usb + pci + + + + + yes + no + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [0-9]+ + + + + + [0-9]+ + 1 + + + + + -1 + + + + + [0-9]+ + 4000 + + + + + [A-Za-z0-9_\.\+\-&:/]+ + + + + + [A-Za-z0-9_\.\+\-]+ + + + + + [a-zA-Z0-9_\+\-]+ + + + + + + [a-fA-F0-9]{32} + + + [a-fA-F0-9]{8}\-([a-fA-F0-9]{4}\-){3}[a-fA-F0-9]{12} + + + + + + [a-zA-Z0-9_\.\+\-&/%]+ + + + + + /[a-zA-Z0-9_\.\+\-&/%]+ + + + + + /[a-zA-Z0-9_\.\+\-&/%]* + + + + + /[a-zA-Z0-9_\+\-/%]+ + + + + + [a-zA-Z0-9_\.\-:/]+ + + + + + ([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2} + + + + + ([0-2]?[0-9]?[0-9]\.){3}[0-2]?[0-9]?[0-9] + + + + + (0x)?[0-9a-fA-F]{1,4} + + + + + (0x)?[0-9a-fA-F]{1,3} + + + + + (0x)?[0-9a-fA-F]{1,4} + + + + + (0x)?[0-9a-fA-F]{1,2} + + + + + (0x)?[0-1]?[0-9a-fA-F] + + + + + (0x)?[0-7] + + + diff --git a/test/relaxng/libvirt_0.xml b/test/relaxng/libvirt_0.xml new file mode 100644 index 00000000..c17d9d5f --- /dev/null +++ b/test/relaxng/libvirt_0.xml @@ -0,0 +1,23 @@ + + pvtest + 596a5d2171f48fb2e068e2386a5c413e + + linux + /var/lib/xen/vmlinuz.2Dn2YT + /var/lib/xen/initrd.img.0u-Vhq + method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os + + 430080 + 2 + destroy + destroy + destroy + + + + + + + + + diff --git a/xmlregexp.c b/xmlregexp.c index a10bf6b2..2a501ad1 100644 --- a/xmlregexp.c +++ b/xmlregexp.c @@ -2095,12 +2095,13 @@ xmlFACompareRanges(xmlRegRangePtr range1, xmlRegRangePtr range2) { (range2->type == XML_REGEXP_EPSILON)) { return(0); } else if (range1->type == range2->type) { - if ((range1->type != XML_REGEXP_CHARVAL) || - (range1->end < range2->start) || - (range2->end < range1->start)) - ret = 1; - else + if (range1->type != XML_REGEXP_CHARVAL) + ret = 1; + else if ((range1->end < range2->start) || + (range2->end < range1->start)) ret = 0; + else + ret = 1; } else if (range1->type == XML_REGEXP_CHARVAL) { int codepoint; int neg = 0;