Okay looks fine, Applied and pushed to head, thanks Audric and Jan,
Daniel On Fri, Mar 11, 2016 at 09:15:15PM -0500, Audric Schiltknecht wrote: > Original patch is from Jan Pokorný <jpokorny redhat com>. > Improve it according to reviews and add test files. > --- > include/libxml/schemasInternals.h | 92 > +++++++++++++++++++-------------------- > result/relaxng/pattern3_1 | 0 > result/relaxng/pattern3_1.err | 1 + > test/relaxng/pattern3.rng | 11 +++++ > test/relaxng/pattern3_1.xml | 1 + > xmlschemastypes.c | 10 ++++- > 6 files changed, 68 insertions(+), 47 deletions(-) > create mode 100644 result/relaxng/pattern3_1 > create mode 100644 result/relaxng/pattern3_1.err > create mode 100644 test/relaxng/pattern3.rng > create mode 100644 test/relaxng/pattern3_1.xml > > diff --git a/include/libxml/schemasInternals.h > b/include/libxml/schemasInternals.h > index 4f0ca9a..c7cf552 100644 > --- a/include/libxml/schemasInternals.h > +++ b/include/libxml/schemasInternals.h > @@ -28,52 +28,52 @@ extern "C" { > > typedef enum { > XML_SCHEMAS_UNKNOWN = 0, > - XML_SCHEMAS_STRING, > - XML_SCHEMAS_NORMSTRING, > - XML_SCHEMAS_DECIMAL, > - XML_SCHEMAS_TIME, > - XML_SCHEMAS_GDAY, > - XML_SCHEMAS_GMONTH, > - XML_SCHEMAS_GMONTHDAY, > - XML_SCHEMAS_GYEAR, > - XML_SCHEMAS_GYEARMONTH, > - XML_SCHEMAS_DATE, > - XML_SCHEMAS_DATETIME, > - XML_SCHEMAS_DURATION, > - XML_SCHEMAS_FLOAT, > - XML_SCHEMAS_DOUBLE, > - XML_SCHEMAS_BOOLEAN, > - XML_SCHEMAS_TOKEN, > - XML_SCHEMAS_LANGUAGE, > - XML_SCHEMAS_NMTOKEN, > - XML_SCHEMAS_NMTOKENS, > - XML_SCHEMAS_NAME, > - XML_SCHEMAS_QNAME, > - XML_SCHEMAS_NCNAME, > - XML_SCHEMAS_ID, > - XML_SCHEMAS_IDREF, > - XML_SCHEMAS_IDREFS, > - XML_SCHEMAS_ENTITY, > - XML_SCHEMAS_ENTITIES, > - XML_SCHEMAS_NOTATION, > - XML_SCHEMAS_ANYURI, > - XML_SCHEMAS_INTEGER, > - XML_SCHEMAS_NPINTEGER, > - XML_SCHEMAS_NINTEGER, > - XML_SCHEMAS_NNINTEGER, > - XML_SCHEMAS_PINTEGER, > - XML_SCHEMAS_INT, > - XML_SCHEMAS_UINT, > - XML_SCHEMAS_LONG, > - XML_SCHEMAS_ULONG, > - XML_SCHEMAS_SHORT, > - XML_SCHEMAS_USHORT, > - XML_SCHEMAS_BYTE, > - XML_SCHEMAS_UBYTE, > - XML_SCHEMAS_HEXBINARY, > - XML_SCHEMAS_BASE64BINARY, > - XML_SCHEMAS_ANYTYPE, > - XML_SCHEMAS_ANYSIMPLETYPE > + XML_SCHEMAS_STRING = 1, > + XML_SCHEMAS_NORMSTRING = 2, > + XML_SCHEMAS_DECIMAL = 3, > + XML_SCHEMAS_TIME = 4, > + XML_SCHEMAS_GDAY = 5, > + XML_SCHEMAS_GMONTH = 6, > + XML_SCHEMAS_GMONTHDAY = 7, > + XML_SCHEMAS_GYEAR = 8, > + XML_SCHEMAS_GYEARMONTH = 9, > + XML_SCHEMAS_DATE = 10, > + XML_SCHEMAS_DATETIME = 11, > + XML_SCHEMAS_DURATION = 12, > + XML_SCHEMAS_FLOAT = 13, > + XML_SCHEMAS_DOUBLE = 14, > + XML_SCHEMAS_BOOLEAN = 15, > + XML_SCHEMAS_TOKEN = 16, > + XML_SCHEMAS_LANGUAGE = 17, > + XML_SCHEMAS_NMTOKEN = 18, > + XML_SCHEMAS_NMTOKENS = 19, > + XML_SCHEMAS_NAME = 20, > + XML_SCHEMAS_QNAME = 21, > + XML_SCHEMAS_NCNAME = 22, > + XML_SCHEMAS_ID = 23, > + XML_SCHEMAS_IDREF = 24, > + XML_SCHEMAS_IDREFS = 25, > + XML_SCHEMAS_ENTITY = 26, > + XML_SCHEMAS_ENTITIES = 27, > + XML_SCHEMAS_NOTATION = 28, > + XML_SCHEMAS_ANYURI = 29, > + XML_SCHEMAS_INTEGER = 30, > + XML_SCHEMAS_NPINTEGER = 31, > + XML_SCHEMAS_NINTEGER = 32, > + XML_SCHEMAS_NNINTEGER = 33, > + XML_SCHEMAS_PINTEGER = 34, > + XML_SCHEMAS_INT = 35, > + XML_SCHEMAS_UINT = 36, > + XML_SCHEMAS_LONG = 37, > + XML_SCHEMAS_ULONG = 38, > + XML_SCHEMAS_SHORT = 39, > + XML_SCHEMAS_USHORT = 40, > + XML_SCHEMAS_BYTE = 41, > + XML_SCHEMAS_UBYTE = 42, > + XML_SCHEMAS_HEXBINARY = 43, > + XML_SCHEMAS_BASE64BINARY = 44, > + XML_SCHEMAS_ANYTYPE = 45, > + XML_SCHEMAS_ANYSIMPLETYPE = 46 > } xmlSchemaValType; > > /* > diff --git a/result/relaxng/pattern3_1 b/result/relaxng/pattern3_1 > new file mode 100644 > index 0000000..e69de29 > diff --git a/result/relaxng/pattern3_1.err b/result/relaxng/pattern3_1.err > new file mode 100644 > index 0000000..b1a9803 > --- /dev/null > +++ b/result/relaxng/pattern3_1.err > @@ -0,0 +1 @@ > +./test/relaxng/pattern3_1.xml validates > diff --git a/test/relaxng/pattern3.rng b/test/relaxng/pattern3.rng > new file mode 100644 > index 0000000..fa4434f > --- /dev/null > +++ b/test/relaxng/pattern3.rng > @@ -0,0 +1,11 @@ > +<?xml version="1.0"?> > +<grammar xmlns="http://relaxng.org/ns/structure/1.0" > +datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> > + <start> > + <element name="test"> > + <data type="token"> > + <param name="pattern">[a-z]+</param> > + </data> > + </element> > + </start> > +</grammar> > diff --git a/test/relaxng/pattern3_1.xml b/test/relaxng/pattern3_1.xml > new file mode 100644 > index 0000000..f559cd3 > --- /dev/null > +++ b/test/relaxng/pattern3_1.xml > @@ -0,0 +1 @@ > +<test> ooo </test> > diff --git a/xmlschemastypes.c b/xmlschemastypes.c > index ff64f50..3c9514c 100644 > --- a/xmlschemastypes.c > +++ b/xmlschemastypes.c > @@ -5315,7 +5315,15 @@ xmlSchemaValidateFacetInternal(xmlSchemaFacetPtr facet, > */ > if (value == NULL) > return(-1); > - ret = xmlRegexpExec(facet->regexp, value); > + /* > + * If string-derived type, regexp must be tested on the value space > of > + * the datatype. > + * See https://www.w3.org/TR/xmlschema-2/#rf-pattern > + */ > + const int stringType = val && ((val->type >= XML_SCHEMAS_STRING && > val->type <= XML_SCHEMAS_NORMSTRING) > + || (val->type >= XML_SCHEMAS_TOKEN > && val->type <= XML_SCHEMAS_NCNAME)); > + ret = xmlRegexpExec(facet->regexp, > + (stringType && val->value.str) ? val->value.str > : value); > if (ret == 1) > return(0); > if (ret == 0) > -- > 2.7.0 > > _______________________________________________ > xml mailing list, project page http://xmlsoft.org/ > xml@gnome.org > https://mail.gnome.org/mailman/listinfo/xml -- Daniel Veillard | Open Source and Standards, Red Hat veill...@redhat.com | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ http://veillard.com/ | virtualization library http://libvirt.org/ _______________________________________________ xml mailing list, project page http://xmlsoft.org/ xml@gnome.org https://mail.gnome.org/mailman/listinfo/xml