[ 
https://issues.apache.org/jira/browse/XMLBEANS-412?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13247735#comment-13247735
 ] 

Jerry Sy commented on XMLBEANS-412:
-----------------------------------

I have created a fix to this issue and requesting the board to review the fix. 
I am attaching the patch and changed file. It basically allows unescaped '-' at 
the start or end of a positive char group.

svn diff ParserForXMLSchema.java
Index: ParserForXMLSchema.java
===================================================================
--- ParserForXMLSchema.java     (revision 1245727)
+++ ParserForXMLSchema.java     (working copy)
@@ -234,9 +234,9 @@
                 if (type == T_CHAR) {
                     if (c == '[')  throw this.ex("parser.cc.6", this.offset-2);
                     if (c == ']')  throw this.ex("parser.cc.7", this.offset-2);
-                    // (radup) XMLSchema 1.0 allows the '-' as the first 
character of a range,
-                    // but it looks like XMLSchema 1.1 will prohibit it - 
track this
-                    if (c == '-' && !firstloop)  throw this.ex("parser.cc.8", 
this.offset-2);
+                    //https://issues.apache.org/jira/browse/XMLBEANS-412
+                    //unescaped single char '-' is a valid char after '[' and 
before ']' positive range only
+                    if (c== '-' && ((!firstloop && this.chardata!=']') || 
nrange)) throw this.ex("parser.cc.8", this.offset-2);
                 }
                 if (this.read() != T_CHAR || this.chardata != '-') { // Here 
is no '-'.
                     tok.addRange(c, c);
@@ -245,9 +245,15 @@
                     this.next(); // Skips '-'
                     if ((type = this.read()) == T_EOF)  throw 
this.ex("parser.cc.2", this.offset);
                                                 // c '-' ']' -> '-' is a 
single-range.
-                    if ((type == T_CHAR && this.chardata == ']')
-                        || type == T_XMLSCHEMA_CC_SUBTRACTION) {
+                    if (type == T_XMLSCHEMA_CC_SUBTRACTION) {
                         throw this.ex("parser.cc.8", this.offset-1);
+                    } else if (type == T_CHAR && this.chardata == ']') {
+                        //'-' occurs after a single-range but before ']'
+                        if (!nrange) {
+                            tok.addRange(c,c);
+                            tok.addRange('-','-');
+                        } else
+                            throw this.ex("parser.cc.8", this.offset-1);
                     } else {
                         int rangeend = this.chardata;
                         if (type == T_CHAR) {

                
> CLONE -Pattern facet regex requires dash - to be escaped
> --------------------------------------------------------
>
>                 Key: XMLBEANS-412
>                 URL: https://issues.apache.org/jira/browse/XMLBEANS-412
>             Project: XMLBeans
>          Issue Type: Bug
>          Components: Validator
>    Affects Versions: Version 2, Version 2.1, Version 2.2, Version 2.2.1,  
> Version 2.3,  Version 2.3.1
>         Environment: Win 2000, JDK1.5
>            Reporter: Radosław Ceszkiel
>             Fix For: Version 2
>
>         Attachments: ParserForXMLSchema.java, xmlbeans-412.patch
>
>
> Given the following xsd  that should allow only a valid email address pattern:
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
>   <xsd:element name="Email" type="EmailType" />
>   <xsd:simpleType name="EmailType" >
>     <xsd:restriction base="xsd:token">
>       <xsd:pattern 
> value="([\.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(([a-zA-Z0-9_-])*\.([a-zA-Z0-9_-])+)+"/>
>     </xsd:restriction>
>   </xsd:simpleType>
> </xsd:schema>
> Using the following simple xml instance:
> <Email>t...@test.com</Email>
> Running:
> validate sample.xsd sample.xml
> generates:
> Schema invalid:
> D:\sample.xsd:7: error: pattern-regex: The regular expression 
> '([\.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(([a-zA-Z0-9_-])*\.([a-zA-Z0-9_-])+)+' is 
> malformed: '-' is an invalid character range. Write '\-'.
> A dash at the end or at the beginning of a character range does not have to 
> be escaped (see 
> http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/datatypes.html#nt-charRange
>  "The - character is a valid character range only at the beginning or end of 
> a - positive character group- .") 
> The regular expression in the email example is a valid xsd regexp and should 
> be accepted by the XmlBeans validator.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@xmlbeans.apache.org
For additional commands, e-mail: dev-h...@xmlbeans.apache.org

Reply via email to