You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by sa...@apache.org on 2003/03/25 00:37:56 UTC

cvs commit: xml-xerces/java/src/org/apache/xerces/impl/xpath/regex message.properties ParserForXMLSchema.java

sandygao    2003/03/24 15:37:55

  Modified:    java/src/org/apache/xerces/impl/xpath/regex
                        message.properties ParserForXMLSchema.java
  Log:
  Fixing bugs 16563: Parser accepts invalid regular expression.
  Many thanks to Khaled Noaman for the patch.
  
  Revision  Changes    Path
  1.5       +6 -4      xml-xerces/java/src/org/apache/xerces/impl/xpath/regex/message.properties
  
  Index: message.properties
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xpath/regex/message.properties,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- message.properties	24 Mar 2003 23:31:04 -0000	1.4
  +++ message.properties	24 Mar 2003 23:37:55 -0000	1.5
  @@ -22,15 +22,17 @@
   parser.cc.5=']' is expected.
   parser.cc.6='[' is invalid in a character class.  Write '\\['.
   parser.cc.7=']' is invalid in a character class.  Write '\\]'.
  +parser.cc.8='-' is an invalid character range. Write '\\-'.
   parser.ope.1='[' is expected.
   parser.ope.2=')' or '-[' or '+[' or '&[' is expected.
  +parser.ope.3=The range end code point is less than the start code point.
   parser.descape.1=Invalid Unicode hex notation.
   parser.descape.2=Overflow in a hex notation.
   parser.descape.3='\\x{' must be closed by '}'.
   parser.descape.4=Invalid Unicode code point.
   parser.descape.5=An anchor must not be here.
   parser.process.1=This expression is not supported in the current option setting.
  -+parser.quantifier.1=Invalid quantifier. A digit is expected.
  -+parser.quantifier.2=Invalid quantifier. Invalid quantity or a '}' is missing.
  -+parser.quantifier.3=Invalid quantifier. A digit or '}' is expected.
  -+parser.quantifier.4=Invalid quantifier. A min quantity must be <= a max quantity.
  +parser.quantifier.1=Invalid quantifier. A digit is expected.
  +parser.quantifier.2=Invalid quantifier. Invalid quantity or a '}' is missing.
  +parser.quantifier.3=Invalid quantifier. A digit or '}' is expected.
  +parser.quantifier.4=Invalid quantifier. A min quantity must be <= a max quantity.
  
  
  
  1.5       +26 -22    xml-xerces/java/src/org/apache/xerces/impl/xpath/regex/ParserForXMLSchema.java
  
  Index: ParserForXMLSchema.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xpath/regex/ParserForXMLSchema.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ParserForXMLSchema.java	9 Aug 2002 15:18:17 -0000	1.4
  +++ ParserForXMLSchema.java	24 Mar 2003 23:37:55 -0000	1.5
  @@ -2,7 +2,7 @@
    * The Apache Software License, Version 1.1
    *
    *
  - * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights 
  + * Copyright (c) 1999-2003 The Apache Software Foundation.  All rights 
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -277,6 +277,7 @@
                   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);
  +                    if (c == '-')  throw this.ex("parser.cc.8", this.offset-2);
                   }
                   if (this.read() != T_CHAR || this.chardata != '-') { // Here is no '-'.
                       tok.addRange(c, c);
  @@ -285,23 +286,21 @@
                       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 == ']') {
  -                        tok.addRange(c, c);
  -                        tok.addRange('-', '-');
  -                    }
  -                                                // c '-' '-[' -> '-' is a single-range.
  -                    else if (type == T_XMLSCHEMA_CC_SUBTRACTION) {
  -                        tok.addRange(c, c);
  -                        tok.addRange('-', '-');
  +                    if ((type == T_CHAR && this.chardata == ']')
  +                        || type == T_XMLSCHEMA_CC_SUBTRACTION) {
  +                        throw this.ex("parser.cc.8", this.offset-1);
                       } else {
                           int rangeend = this.chardata;
                           if (type == T_CHAR) {
                               if (rangeend == '[')  throw this.ex("parser.cc.6", this.offset-1);
                               if (rangeend == ']')  throw this.ex("parser.cc.7", this.offset-1);
  +                            if (rangeend == '-')  throw this.ex("parser.cc.8", this.offset-2);
                           }
  -                        if (type == T_BACKSOLIDUS)
  +                        else if (type == T_BACKSOLIDUS)
                               rangeend = this.decodeEscaped();
                           this.next();
  +
  +                        if (c > rangeend)  throw this.ex("parser.ope.3", this.offset-1);
                           tok.addRange(c, rangeend);
                       }
                   }
  @@ -356,18 +355,23 @@
             case 'n':  c = '\n';  break; // LINE FEED U+000A
             case 'r':  c = '\r';  break; // CRRIAGE RETURN U+000D
             case 't':  c = '\t';  break; // HORIZONTAL TABULATION U+0009
  -
  -          case 'e':
  -          case 'f':
  -          case 'x':
  -          case 'u':
  -          case 'v':
  -            throw ex("parser.process.1", this.offset-2);
  -          case 'A':
  -          case 'Z':
  -          case 'z':
  -            throw ex("parser.descape.5", this.offset-2);
  +          case '\\':
  +          case '|':
  +          case '.':
  +          case '^':
  +          case '-':
  +          case '?':
  +          case '*':
  +          case '+':
  +          case '{':
  +          case '}':
  +          case '(':
  +          case ')':
  +          case '[':
  +          case ']':
  +            break; // return actucal char
             default:
  +            throw ex("parser.process.1", this.offset-2);
           }
           return c;
       }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org