Diff for /embedaddon/pcre/pcre_dfa_exec.c between versions 1.1.1.4 and 1.1.1.5

version 1.1.1.4, 2013/07/22 08:25:55 version 1.1.1.5, 2014/06/15 19:46:04
Line 120  static const pcre_uint8 coptable[] = { Line 120  static const pcre_uint8 coptable[] = {
   0, 0,                          /* \P, \p                                 */    0, 0,                          /* \P, \p                                 */
   0, 0, 0, 0, 0,                 /* \R, \H, \h, \V, \v                     */    0, 0, 0, 0, 0,                 /* \R, \H, \h, \V, \v                     */
   0,                             /* \X                                     */    0,                             /* \X                                     */
  0, 0, 0, 0, 0, 0,              /* \Z, \z, ^, ^M, $, $M                   */  0, 0, 0, 0, 0, 0,              /* \Z, \z, $, $M, ^, ^M                   */
   1,                             /* Char                                   */    1,                             /* Char                                   */
   1,                             /* Chari                                  */    1,                             /* Chari                                  */
   1,                             /* not                                    */    1,                             /* not                                    */
Line 151  static const pcre_uint8 coptable[] = { Line 151  static const pcre_uint8 coptable[] = {
   /* Character class & ref repeats                                         */    /* Character class & ref repeats                                         */
   0, 0, 0, 0, 0, 0,              /* *, *?, +, +?, ?, ??                    */    0, 0, 0, 0, 0, 0,              /* *, *?, +, +?, ?, ??                    */
   0, 0,                          /* CRRANGE, CRMINRANGE                    */    0, 0,                          /* CRRANGE, CRMINRANGE                    */
     0, 0, 0, 0,                    /* Possessive *+, ++, ?+, CRPOSRANGE      */
   0,                             /* CLASS                                  */    0,                             /* CLASS                                  */
   0,                             /* NCLASS                                 */    0,                             /* NCLASS                                 */
   0,                             /* XCLASS - variable length               */    0,                             /* XCLASS - variable length               */
   0,                             /* REF                                    */    0,                             /* REF                                    */
   0,                             /* REFI                                   */    0,                             /* REFI                                   */
     0,                             /* DNREF                                  */
     0,                             /* DNREFI                                 */
   0,                             /* RECURSE                                */    0,                             /* RECURSE                                */
   0,                             /* CALLOUT                                */    0,                             /* CALLOUT                                */
   0,                             /* Alt                                    */    0,                             /* Alt                                    */
Line 171  static const pcre_uint8 coptable[] = { Line 174  static const pcre_uint8 coptable[] = {
   0, 0,                          /* ONCE, ONCE_NC                          */    0, 0,                          /* ONCE, ONCE_NC                          */
   0, 0, 0, 0, 0,                 /* BRA, BRAPOS, CBRA, CBRAPOS, COND       */    0, 0, 0, 0, 0,                 /* BRA, BRAPOS, CBRA, CBRAPOS, COND       */
   0, 0, 0, 0, 0,                 /* SBRA, SBRAPOS, SCBRA, SCBRAPOS, SCOND  */    0, 0, 0, 0, 0,                 /* SBRA, SBRAPOS, SCBRA, SCBRAPOS, SCOND  */
  0, 0,                          /* CREF, NCREF                            */  0, 0,                          /* CREF, DNCREF                           */
  0, 0,                          /* RREF, NRREF                            */  0, 0,                          /* RREF, DNRREF                           */
   0,                             /* DEF                                    */    0,                             /* DEF                                    */
   0, 0, 0,                       /* BRAZERO, BRAMINZERO, BRAPOSZERO        */    0, 0, 0,                       /* BRAZERO, BRAMINZERO, BRAPOSZERO        */
   0, 0, 0,                       /* MARK, PRUNE, PRUNE_ARG                 */    0, 0, 0,                       /* MARK, PRUNE, PRUNE_ARG                 */
Line 194  static const pcre_uint8 poptable[] = { Line 197  static const pcre_uint8 poptable[] = {
   1, 1,                          /* \P, \p                                 */    1, 1,                          /* \P, \p                                 */
   1, 1, 1, 1, 1,                 /* \R, \H, \h, \V, \v                     */    1, 1, 1, 1, 1,                 /* \R, \H, \h, \V, \v                     */
   1,                             /* \X                                     */    1,                             /* \X                                     */
  0, 0, 0, 0, 0, 0,              /* \Z, \z, ^, ^M, $, $M                   */  0, 0, 0, 0, 0, 0,              /* \Z, \z, $, $M, ^, ^M                   */
   1,                             /* Char                                   */    1,                             /* Char                                   */
   1,                             /* Chari                                  */    1,                             /* Chari                                  */
   1,                             /* not                                    */    1,                             /* not                                    */
Line 220  static const pcre_uint8 poptable[] = { Line 223  static const pcre_uint8 poptable[] = {
   /* Character class & ref repeats                                         */    /* Character class & ref repeats                                         */
   1, 1, 1, 1, 1, 1,              /* *, *?, +, +?, ?, ??                    */    1, 1, 1, 1, 1, 1,              /* *, *?, +, +?, ?, ??                    */
   1, 1,                          /* CRRANGE, CRMINRANGE                    */    1, 1,                          /* CRRANGE, CRMINRANGE                    */
     1, 1, 1, 1,                    /* Possessive *+, ++, ?+, CRPOSRANGE      */
   1,                             /* CLASS                                  */    1,                             /* CLASS                                  */
   1,                             /* NCLASS                                 */    1,                             /* NCLASS                                 */
   1,                             /* XCLASS - variable length               */    1,                             /* XCLASS - variable length               */
   0,                             /* REF                                    */    0,                             /* REF                                    */
   0,                             /* REFI                                   */    0,                             /* REFI                                   */
     0,                             /* DNREF                                  */
     0,                             /* DNREFI                                 */
   0,                             /* RECURSE                                */    0,                             /* RECURSE                                */
   0,                             /* CALLOUT                                */    0,                             /* CALLOUT                                */
   0,                             /* Alt                                    */    0,                             /* Alt                                    */
Line 240  static const pcre_uint8 poptable[] = { Line 246  static const pcre_uint8 poptable[] = {
   0, 0,                          /* ONCE, ONCE_NC                          */    0, 0,                          /* ONCE, ONCE_NC                          */
   0, 0, 0, 0, 0,                 /* BRA, BRAPOS, CBRA, CBRAPOS, COND       */    0, 0, 0, 0, 0,                 /* BRA, BRAPOS, CBRA, CBRAPOS, COND       */
   0, 0, 0, 0, 0,                 /* SBRA, SBRAPOS, SCBRA, SCBRAPOS, SCOND  */    0, 0, 0, 0, 0,                 /* SBRA, SBRAPOS, SCBRA, SCBRAPOS, SCOND  */
  0, 0,                          /* CREF, NCREF                            */  0, 0,                          /* CREF, DNCREF                           */
  0, 0,                          /* RREF, NRREF                            */  0, 0,                          /* RREF, DNRREF                           */
   0,                             /* DEF                                    */    0,                             /* DEF                                    */
   0, 0, 0,                       /* BRAZERO, BRAMINZERO, BRAPOSZERO        */    0, 0, 0,                       /* BRAZERO, BRAMINZERO, BRAPOSZERO        */
   0, 0, 0,                       /* MARK, PRUNE, PRUNE_ARG                 */    0, 0, 0,                       /* MARK, PRUNE, PRUNE_ARG                 */
Line 1094  for (;;) Line 1100  for (;;)
                PRIV(ucp_gentype)[prop->chartype] == ucp_N;                 PRIV(ucp_gentype)[prop->chartype] == ucp_N;
           break;            break;
   
          case PT_SPACE:    /* Perl space */          /* Perl space used to exclude VT, but from Perl 5.18 it is included,
          OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z ||          which means that Perl space and POSIX space are now identical. PCRE
               c == CHAR_HT || c == CHAR_NL || c == CHAR_FF || c == CHAR_CR;          was changed at release 8.34. */
          break; 
   
             case PT_SPACE:    /* Perl space */
           case PT_PXSPACE:  /* POSIX space */            case PT_PXSPACE:  /* POSIX space */
          OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z ||          switch(c)
               c == CHAR_HT || c == CHAR_NL || c == CHAR_VT ||            {
               c == CHAR_FF || c == CHAR_CR;            HSPACE_CASES:
             VSPACE_CASES:
             OK = TRUE;
             break;
 
             default:
             OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z;
             break;
             }
           break;            break;
   
           case PT_WORD:            case PT_WORD:
Line 1344  for (;;) Line 1358  for (;;)
                PRIV(ucp_gentype)[prop->chartype] == ucp_N;                 PRIV(ucp_gentype)[prop->chartype] == ucp_N;
           break;            break;
   
          case PT_SPACE:    /* Perl space */          /* Perl space used to exclude VT, but from Perl 5.18 it is included,
          OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z ||          which means that Perl space and POSIX space are now identical. PCRE
               c == CHAR_HT || c == CHAR_NL || c == CHAR_FF || c == CHAR_CR;          was changed at release 8.34. */
          break; 
   
             case PT_SPACE:    /* Perl space */
           case PT_PXSPACE:  /* POSIX space */            case PT_PXSPACE:  /* POSIX space */
          OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z ||          switch(c)
               c == CHAR_HT || c == CHAR_NL || c == CHAR_VT ||            {
               c == CHAR_FF || c == CHAR_CR;            HSPACE_CASES:
             VSPACE_CASES:
             OK = TRUE;
             break;
 
             default:
             OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z;
             break;
             }
           break;            break;
   
           case PT_WORD:            case PT_WORD:
Line 1588  for (;;) Line 1610  for (;;)
                PRIV(ucp_gentype)[prop->chartype] == ucp_N;                 PRIV(ucp_gentype)[prop->chartype] == ucp_N;
           break;            break;
   
          case PT_SPACE:    /* Perl space */          /* Perl space used to exclude VT, but from Perl 5.18 it is included,
          OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z ||          which means that Perl space and POSIX space are now identical. PCRE
               c == CHAR_HT || c == CHAR_NL || c == CHAR_FF || c == CHAR_CR;          was changed at release 8.34. */
          break; 
   
             case PT_SPACE:    /* Perl space */
           case PT_PXSPACE:  /* POSIX space */            case PT_PXSPACE:  /* POSIX space */
          OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z ||          switch(c)
               c == CHAR_HT || c == CHAR_NL || c == CHAR_VT ||            {
               c == CHAR_FF || c == CHAR_CR;            HSPACE_CASES:
             VSPACE_CASES:
             OK = TRUE;
             break;
 
             default:
             OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z;
             break;
             }
           break;            break;
   
           case PT_WORD:            case PT_WORD:
Line 1857  for (;;) Line 1887  for (;;)
                PRIV(ucp_gentype)[prop->chartype] == ucp_N;                 PRIV(ucp_gentype)[prop->chartype] == ucp_N;
           break;            break;
   
          case PT_SPACE:    /* Perl space */          /* Perl space used to exclude VT, but from Perl 5.18 it is included,
          OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z ||          which means that Perl space and POSIX space are now identical. PCRE
               c == CHAR_HT || c == CHAR_NL || c == CHAR_FF || c == CHAR_CR;          was changed at release 8.34. */
          break; 
   
             case PT_SPACE:    /* Perl space */
           case PT_PXSPACE:  /* POSIX space */            case PT_PXSPACE:  /* POSIX space */
          OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z ||          switch(c)
               c == CHAR_HT || c == CHAR_NL || c == CHAR_VT ||            {
               c == CHAR_FF || c == CHAR_CR;            HSPACE_CASES:
             VSPACE_CASES:
             OK = TRUE;
             break;
 
             default:
             OK = PRIV(ucp_gentype)[prop->chartype] == ucp_Z;
             break;
             }
           break;            break;
   
           case PT_WORD:            case PT_WORD:
Line 2533  for (;;) Line 2571  for (;;)
           {            {
           case OP_CRSTAR:            case OP_CRSTAR:
           case OP_CRMINSTAR:            case OP_CRMINSTAR:
             case OP_CRPOSSTAR:
           ADD_ACTIVE(next_state_offset + 1, 0);            ADD_ACTIVE(next_state_offset + 1, 0);
          if (isinclass) { ADD_NEW(state_offset, 0); }          if (isinclass)
             {
             if (*ecode == OP_CRPOSSTAR)
               {
               active_count--;           /* Remove non-match possibility */
               next_active_state--;
               }
             ADD_NEW(state_offset, 0);
             }
           break;            break;
   
           case OP_CRPLUS:            case OP_CRPLUS:
           case OP_CRMINPLUS:            case OP_CRMINPLUS:
             case OP_CRPOSPLUS:
           count = current_state->count;  /* Already matched */            count = current_state->count;  /* Already matched */
           if (count > 0) { ADD_ACTIVE(next_state_offset + 1, 0); }            if (count > 0) { ADD_ACTIVE(next_state_offset + 1, 0); }
          if (isinclass) { count++; ADD_NEW(state_offset, count); }          if (isinclass)
             {
             if (count > 0 && *ecode == OP_CRPOSPLUS)
               {
               active_count--;           /* Remove non-match possibility */
               next_active_state--;
               }
             count++;
             ADD_NEW(state_offset, count);
             }
           break;            break;
   
           case OP_CRQUERY:            case OP_CRQUERY:
           case OP_CRMINQUERY:            case OP_CRMINQUERY:
             case OP_CRPOSQUERY:
           ADD_ACTIVE(next_state_offset + 1, 0);            ADD_ACTIVE(next_state_offset + 1, 0);
          if (isinclass) { ADD_NEW(next_state_offset + 1, 0); }          if (isinclass)
             {
             if (*ecode == OP_CRPOSQUERY)
               {
               active_count--;           /* Remove non-match possibility */
               next_active_state--;
               }
             ADD_NEW(next_state_offset + 1, 0);
             }
           break;            break;
   
           case OP_CRRANGE:            case OP_CRRANGE:
           case OP_CRMINRANGE:            case OP_CRMINRANGE:
             case OP_CRPOSRANGE:
           count = current_state->count;  /* Already matched */            count = current_state->count;  /* Already matched */
           if (count >= (int)GET2(ecode, 1))            if (count >= (int)GET2(ecode, 1))
             { ADD_ACTIVE(next_state_offset + 1 + 2 * IMM2_SIZE, 0); }              { ADD_ACTIVE(next_state_offset + 1 + 2 * IMM2_SIZE, 0); }
           if (isinclass)            if (isinclass)
             {              {
             int max = (int)GET2(ecode, 1 + IMM2_SIZE);              int max = (int)GET2(ecode, 1 + IMM2_SIZE);
               if (*ecode == OP_CRPOSRANGE)
                 {
                 active_count--;           /* Remove non-match possibility */
                 next_active_state--;
                 }
             if (++count >= max && max != 0)   /* Max 0 => no limit */              if (++count >= max && max != 0)   /* Max 0 => no limit */
               { ADD_NEW(next_state_offset + 1 + 2 * IMM2_SIZE, 0); }                { ADD_NEW(next_state_offset + 1 + 2 * IMM2_SIZE, 0); }
             else              else
Line 2657  for (;;) Line 2729  for (;;)
   
         condcode = code[LINK_SIZE+1];          condcode = code[LINK_SIZE+1];
   
        /* Back reference conditions are not supported */        /* Back reference conditions and duplicate named recursion conditions
         are not supported */
   
        if (condcode == OP_CREF || condcode == OP_NCREF)        if (condcode == OP_CREF || condcode == OP_DNCREF ||
             condcode == OP_DNRREF)
           return PCRE_ERROR_DFA_UCOND;            return PCRE_ERROR_DFA_UCOND;
   
         /* The DEFINE condition is always false */          /* The DEFINE condition is always false */
Line 2671  for (;;) Line 2745  for (;;)
         which means "test if in any recursion". We can't test for specifically          which means "test if in any recursion". We can't test for specifically
         recursed groups. */          recursed groups. */
   
        else if (condcode == OP_RREF || condcode == OP_NRREF)        else if (condcode == OP_RREF)
           {            {
           int value = GET2(code, LINK_SIZE + 2);            int value = GET2(code, LINK_SIZE + 2);
           if (value != RREF_ANY) return PCRE_ERROR_DFA_UCOND;            if (value != RREF_ANY) return PCRE_ERROR_DFA_UCOND;

Removed from v.1.1.1.4  
changed lines
  Added in v.1.1.1.5


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>