Changes On Branch regexp-x
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Changes In Branch regexp-x Excluding Merge-Ins

This is equivalent to a diff from acea7010b8 to bef9a956c0

2013-01-11
18:12
Off-by-one error in regexp \u escape sequence parsing. Regexp \x escape sequence should only accept exactly 2 hex digits. check-in: e4ca677a6c user: drh tags: trunk
18:03
Enhancements to the TICKETCHNG table: (1) Add the tkt_rid column and populate it (if present) with the recordID of the artifact. (2) For columns that appear in both TICKET and TICKETCHNG but are missing from the artifact, fill in the TICKETCHNG value with the value from TICKET at that point in time. (3) Add the test-ticket-rebuild command for tes... check-in: a18a49c875 user: drh tags: trunk
12:28
merge trunk check-in: 6e9e6436a6 user: jan.nijtmans tags: allow-backslash-in-card-filename
08:10
Off-by-one error in regexp \u escape sequence parsing. Regexp \x escape sequence should only accept exactly 2 hex digits. Typo. Closed-Leaf check-in: bef9a956c0 user: jan.nijtmans tags: regexp-x
2013-01-10
12:51
Added checkin-count to (fossil info) output (ML request). check-in: acea7010b8 user: stephan tags: trunk
2013-01-09
15:59
Fix incorrect license statement on the http_ssl.c file. No code changes. check-in: c7133bd79d user: drh tags: trunk

Changes to src/regexp.c.

    30     30   **     X|Y     X or Y
    31     31   **     ^X      X occurring at the beginning of the string
    32     32   **     X$      X occurring at the end of the string
    33     33   **     .       Match any single character
    34     34   **     \c      Character c where c is one of \{}()[]|*+?.
    35     35   **     \c      C-language escapes for c in afnrtv.  ex: \t or \n
    36     36   **     \uXXXX  Where XXXX is exactly 4 hex digits, unicode value XXXX
    37         -**     \xXXX   Where XXX is any number of hex digits, unicode value XXX
           37  +**     \xXX    Where XX is exactly 2 hex digits, unicode value XX
    38     38   **     [abc]   Any single character from the set abc
    39     39   **     [^abc]  Any single character not in the set abc
    40     40   **     [a-z]   Any single character in the range a-z
    41     41   **     [^a-z]  Any single character not in the range a-z
    42     42   **     \b      Word boundary
    43     43   **     \w      Word character.  [A-Za-z0-9_]
    44     44   **     \W      Non-word character
................................................................................
   379    379       return 0;
   380    380     }
   381    381     *pV = (*pV)*16 + (c & 0xff);
   382    382     return 1;
   383    383   }
   384    384   
   385    385   /* A backslash character has been seen, read the next character and
   386         -** return its intepretation.
          386  +** return its interpretation.
   387    387   */
   388    388   static unsigned re_esc_char(ReCompiled *p){
   389    389     static const char zEsc[] = "afnrtv\\()*.+?[$^{|}]";
   390    390     static const char zTrans[] = "\a\f\n\r\t\v";
   391    391     int i, v = 0;
   392    392     char c;
   393    393     if( p->sIn.i>=p->sIn.mx ) return 0;
   394    394     c = p->sIn.z[p->sIn.i];
   395         -  if( c=='u' && p->sIn.i+5<p->sIn.mx ){
          395  +  if( c=='u' && p->sIn.i+4<p->sIn.mx ){
   396    396       const unsigned char *zIn = p->sIn.z + p->sIn.i;
   397         -    v = 0;
   398    397       if( re_hex(zIn[1],&v)
   399    398        && re_hex(zIn[2],&v)
   400    399        && re_hex(zIn[3],&v)
   401    400        && re_hex(zIn[4],&v)
   402    401       ){
   403    402         p->sIn.i += 5;
   404    403         return v;
   405    404       }
   406    405     }
   407    406     if( c=='x' ){
   408         -    v = 0;
   409         -    for(i=1; p->sIn.i<p->sIn.mx && re_hex(p->sIn.z[p->sIn.i+i], &v); i++){}
   410         -    if( i>1 ){
   411         -      p->sIn.i += i;
   412         -      return v;
          407  +    const unsigned char *zIn = p->sIn.z + p->sIn.i;
          408  +    if( p->sIn.i+2<p->sIn.mx ){
          409  +      if( re_hex(zIn[1],&v) && re_hex(zIn[2],&v) ){
          410  +        p->sIn.i += 3;
          411  +        return v;
          412  +      }
   413    413       }
   414    414     }
   415    415     for(i=0; zEsc[i] && zEsc[i]!=c; i++){}
   416    416     if( zEsc[i] ){
   417    417       if( i<6 ) c = zTrans[i];
   418    418       p->sIn.i++;
   419    419     }else{