/[pcre]/code/trunk/pcre_compile.c
ViewVC logotype

Diff of /code/trunk/pcre_compile.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 295 by ph10, Mon Dec 31 17:00:24 2007 UTC revision 298 by ph10, Thu Jan 10 17:09:12 2008 UTC
# Line 1738  return TRUE; Line 1738  return TRUE;
1738    
1739  /* This function is called when the sequence "[:" or "[." or "[=" is  /* This function is called when the sequence "[:" or "[." or "[=" is
1740  encountered in a character class. It checks whether this is followed by a  encountered in a character class. It checks whether this is followed by a
1741  sequence of characters terminated by a matching ":]" or ".]" or "=]". If we  sequence of characters terminated by a matching ":]" or ".]" or "=]". If we
1742  reach an unescaped ']' without the special preceding character, return FALSE.  reach an unescaped ']' without the special preceding character, return FALSE.
1743    
1744  Originally, this function only recognized a sequence of letters between the  Originally, this function only recognized a sequence of letters between the
1745  terminators, but it seems that Perl recognizes any sequence of characters,  terminators, but it seems that Perl recognizes any sequence of characters,
1746  though of course unknown POSIX names are subsequently rejected. Perl gives an  though of course unknown POSIX names are subsequently rejected. Perl gives an
1747  "Unknown POSIX class" error for [:f\oo:] for example, where previously PCRE  "Unknown POSIX class" error for [:f\oo:] for example, where previously PCRE
1748  didn't consider this to be a POSIX class. Likewise for [:1234:].  didn't consider this to be a POSIX class. Likewise for [:1234:].
1749    
1750  The problem in trying to be exactly like Perl is in the handling of escapes. We  The problem in trying to be exactly like Perl is in the handling of escapes. We
1751  have to be sure that [abc[:x\]pqr] is *not* treated as containing a POSIX  have to be sure that [abc[:x\]pqr] is *not* treated as containing a POSIX
1752  class, but [abc[:x\]pqr:]] is (so that an error can be generated). The code  class, but [abc[:x\]pqr:]] is (so that an error can be generated). The code
1753  below handles the special case of \], but does not try to do any other escape  below handles the special case of \], but does not try to do any other escape
1754  processing. This makes it different from Perl for cases such as [:l\ower:]  processing. This makes it different from Perl for cases such as [:l\ower:]
1755  where Perl recognizes it as the POSIX class "lower" but PCRE does not recognize  where Perl recognizes it as the POSIX class "lower" but PCRE does not recognize
1756  "l\ower". This is a lesser evil that not diagnosing bad classes when Perl does,  "l\ower". This is a lesser evil that not diagnosing bad classes when Perl does,
1757  I think.  I think.
1758    
1759  Arguments:  Arguments:
# Line 1771  terminator = *(++ptr); /* compiler war Line 1771  terminator = *(++ptr); /* compiler war
1771  for (++ptr; *ptr != 0; ptr++)  for (++ptr; *ptr != 0; ptr++)
1772    {    {
1773    if (*ptr == '\\' && ptr[1] == ']') ptr++; else    if (*ptr == '\\' && ptr[1] == ']') ptr++; else
1774      {      {
1775      if (*ptr == ']') return FALSE;      if (*ptr == ']') return FALSE;
1776      if (*ptr == terminator && ptr[1] == ']')      if (*ptr == terminator && ptr[1] == ']')
1777        {        {
1778        *endptr = ptr;        *endptr = ptr;
1779        return TRUE;        return TRUE;
1780        }        }
1781      }      }
1782    }    }
1783  return FALSE;  return FALSE;
1784  }  }
1785    

Legend:
Removed from v.295  
changed lines
  Added in v.298

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12