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

Diff of /code/trunk/pcre_exec.c

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

revision 924 by zherczeg, Wed Feb 22 10:23:56 2012 UTC revision 933 by ph10, Sat Feb 25 12:18:23 2012 UTC
# Line 142  Arguments: Line 142  Arguments:
142    
143  Returns:      >= 0 the number of subject bytes matched  Returns:      >= 0 the number of subject bytes matched
144                -1 no match                -1 no match
145                -2 partial match; always given if at end subject                -2 partial match; always given if at end subject
146  */  */
147    
148  static int  static int
# Line 165  pchars(p, length, FALSE, md); Line 165  pchars(p, length, FALSE, md);
165  printf("\n");  printf("\n");
166  #endif  #endif
167    
168  /* Always fail if reference not set (and not JavaScript compatible - in that  /* Always fail if reference not set (and not JavaScript compatible - in that
169  case the length is passed as zero). */  case the length is passed as zero). */
170    
171  if (length < 0) return -1;  if (length < 0) return -1;
# Line 220  are in UTF-8 mode. */ Line 220  are in UTF-8 mode. */
220    
221  else  else
222    {    {
223    while (length-- > 0)    while (length-- > 0)
224      {      {
225      if (eptr >= md->end_subject) return -2;   /* Partial match */      if (eptr >= md->end_subject) return -2;   /* Partial match */
226      if (*p++ != *eptr++) return -1;      if (*p++ != *eptr++) return -1;
227      }      }
228    }    }
229    
230  return (int)(eptr - eptr_start);  return (int)(eptr - eptr_start);
# Line 317  argument of match(), which never changes Line 317  argument of match(), which never changes
317    
318  #define RMATCH(ra,rb,rc,rd,re,rw)\  #define RMATCH(ra,rb,rc,rd,re,rw)\
319    {\    {\
320    heapframe *newframe = (heapframe *)(PUBL(stack_malloc))(sizeof(heapframe));\    heapframe *newframe = frame->Xnextframe;\
321    if (newframe == NULL) RRETURN(PCRE_ERROR_NOMEMORY);\    if (newframe == NULL)\
322    frame->Xwhere = rw; \      {\
323        newframe = (heapframe *)(PUBL(stack_malloc))(sizeof(heapframe));\
324        if (newframe == NULL) RRETURN(PCRE_ERROR_NOMEMORY);\
325        newframe->Xnextframe = NULL;\
326        frame->Xnextframe = newframe;\
327        }\
328      frame->Xwhere = rw;\
329    newframe->Xeptr = ra;\    newframe->Xeptr = ra;\
330    newframe->Xecode = rb;\    newframe->Xecode = rb;\
331    newframe->Xmstart = mstart;\    newframe->Xmstart = mstart;\
# Line 338  argument of match(), which never changes Line 344  argument of match(), which never changes
344    {\    {\
345    heapframe *oldframe = frame;\    heapframe *oldframe = frame;\
346    frame = oldframe->Xprevframe;\    frame = oldframe->Xprevframe;\
   if (oldframe != &frame_zero) (PUBL(stack_free))(oldframe);\  
347    if (frame != NULL)\    if (frame != NULL)\
348      {\      {\
349      rrc = ra;\      rrc = ra;\
# Line 352  argument of match(), which never changes Line 357  argument of match(), which never changes
357    
358  typedef struct heapframe {  typedef struct heapframe {
359    struct heapframe *Xprevframe;    struct heapframe *Xprevframe;
360      struct heapframe *Xnextframe;
361    
362    /* Function arguments that may change */    /* Function arguments that may change */
363    
# Line 498  the top-level on the stack rather than m Line 504  the top-level on the stack rather than m
504  boost in many cases where there is not much "recursion". */  boost in many cases where there is not much "recursion". */
505    
506  #ifdef NO_RECURSE  #ifdef NO_RECURSE
507  heapframe frame_zero;  heapframe *frame = (heapframe *)md->match_frames_base;
 heapframe *frame = &frame_zero;  
 frame->Xprevframe = NULL;            /* Marks the top level */  
508    
509  /* Copy in the original argument variables */  /* Copy in the original argument variables */
510    
# Line 2065  for (;;) Line 2069  for (;;)
2069    
2070      case OP_DOLLM:      case OP_DOLLM:
2071      if (eptr < md->end_subject)      if (eptr < md->end_subject)
2072        {        {
2073        if (!IS_NEWLINE(eptr))        if (!IS_NEWLINE(eptr))
2074          {          {
2075          if (md->partial != 0 &&          if (md->partial != 0 &&
2076              eptr + 1 >= md->end_subject &&              eptr + 1 >= md->end_subject &&
2077              NLBLOCK->nltype == NLTYPE_FIXED &&              NLBLOCK->nltype == NLTYPE_FIXED &&
2078              NLBLOCK->nllen == 2 &&              NLBLOCK->nllen == 2 &&
2079              *eptr == NLBLOCK->nl[0])              *eptr == NLBLOCK->nl[0])
2080            {            {
2081            md->hitend = TRUE;            md->hitend = TRUE;
2082            if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);            if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
2083            }            }
2084          RRETURN(MATCH_NOMATCH);          RRETURN(MATCH_NOMATCH);
2085          }          }
2086        }        }
2087      else      else
2088        {        {
# Line 2115  for (;;) Line 2119  for (;;)
2119        if (md->partial != 0 &&        if (md->partial != 0 &&
2120            eptr + 1 >= md->end_subject &&            eptr + 1 >= md->end_subject &&
2121            NLBLOCK->nltype == NLTYPE_FIXED &&            NLBLOCK->nltype == NLTYPE_FIXED &&
2122            NLBLOCK->nllen == 2 &&            NLBLOCK->nllen == 2 &&
2123            *eptr == NLBLOCK->nl[0])            *eptr == NLBLOCK->nl[0])
2124          {          {
2125          md->hitend = TRUE;          md->hitend = TRUE;
2126          if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);          if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
2127          }          }
2128        RRETURN(MATCH_NOMATCH);        RRETURN(MATCH_NOMATCH);
2129        }        }
2130    
2131      /* Either at end of string or \n before end. */      /* Either at end of string or \n before end. */
2132    
# Line 2258  for (;;) Line 2262  for (;;)
2262      if (md->partial != 0 &&      if (md->partial != 0 &&
2263          eptr + 1 >= md->end_subject &&          eptr + 1 >= md->end_subject &&
2264          NLBLOCK->nltype == NLTYPE_FIXED &&          NLBLOCK->nltype == NLTYPE_FIXED &&
2265          NLBLOCK->nllen == 2 &&          NLBLOCK->nllen == 2 &&
2266          *eptr == NLBLOCK->nl[0])          *eptr == NLBLOCK->nl[0])
2267        {        {
2268        md->hitend = TRUE;        md->hitend = TRUE;
2269        if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);        if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
2270        }        }
2271    
2272      /* Fall through */      /* Fall through */
2273    
2274      /* Match any single character whatsoever. */      /* Match any single character whatsoever. */
2275    
2276      case OP_ALLANY:      case OP_ALLANY:
2277      if (eptr >= md->end_subject)   /* DO NOT merge the eptr++ here; it must */      if (eptr >= md->end_subject)   /* DO NOT merge the eptr++ here; it must */
2278        {                            /* not be updated before SCHECK_PARTIAL. */        {                            /* not be updated before SCHECK_PARTIAL. */
# Line 2412  for (;;) Line 2416  for (;;)
2416        if (eptr >= md->end_subject)        if (eptr >= md->end_subject)
2417          {          {
2418          SCHECK_PARTIAL();          SCHECK_PARTIAL();
2419          }          }
2420        else if (*eptr == 0x0a) eptr++;        else if (*eptr == 0x0a) eptr++;
2421        break;        break;
2422    
# Line 2643  for (;;) Line 2647  for (;;)
2647        if (UCD_CATEGORY(c) != ucp_M) break;        if (UCD_CATEGORY(c) != ucp_M) break;
2648        eptr += len;        eptr += len;
2649        }        }
2650      CHECK_PARTIAL();      CHECK_PARTIAL();
2651      ecode++;      ecode++;
2652      break;      break;
2653  #endif  #endif
# Line 2709  for (;;) Line 2713  for (;;)
2713        default:               /* No repeat follows */        default:               /* No repeat follows */
2714        if ((length = match_ref(offset, eptr, length, md, caseless)) < 0)        if ((length = match_ref(offset, eptr, length, md, caseless)) < 0)
2715          {          {
2716          if (length == -2) eptr = md->end_subject;   /* Partial match */          if (length == -2) eptr = md->end_subject;   /* Partial match */
2717          CHECK_PARTIAL();          CHECK_PARTIAL();
2718          RRETURN(MATCH_NOMATCH);          RRETURN(MATCH_NOMATCH);
2719          }          }
# Line 2735  for (;;) Line 2739  for (;;)
2739        int slength;        int slength;
2740        if ((slength = match_ref(offset, eptr, length, md, caseless)) < 0)        if ((slength = match_ref(offset, eptr, length, md, caseless)) < 0)
2741          {          {
2742          if (slength == -2) eptr = md->end_subject;   /* Partial match */          if (slength == -2) eptr = md->end_subject;   /* Partial match */
2743          CHECK_PARTIAL();          CHECK_PARTIAL();
2744          RRETURN(MATCH_NOMATCH);          RRETURN(MATCH_NOMATCH);
2745          }          }
# Line 2759  for (;;) Line 2763  for (;;)
2763          if (fi >= max) RRETURN(MATCH_NOMATCH);          if (fi >= max) RRETURN(MATCH_NOMATCH);
2764          if ((slength = match_ref(offset, eptr, length, md, caseless)) < 0)          if ((slength = match_ref(offset, eptr, length, md, caseless)) < 0)
2765            {            {
2766            if (slength == -2) eptr = md->end_subject;   /* Partial match */            if (slength == -2) eptr = md->end_subject;   /* Partial match */
2767            CHECK_PARTIAL();            CHECK_PARTIAL();
2768            RRETURN(MATCH_NOMATCH);            RRETURN(MATCH_NOMATCH);
2769            }            }
# Line 2778  for (;;) Line 2782  for (;;)
2782          int slength;          int slength;
2783          if ((slength = match_ref(offset, eptr, length, md, caseless)) < 0)          if ((slength = match_ref(offset, eptr, length, md, caseless)) < 0)
2784            {            {
2785            /* Can't use CHECK_PARTIAL because we don't want to update eptr in            /* Can't use CHECK_PARTIAL because we don't want to update eptr in
2786            the soft partial matching case. */            the soft partial matching case. */
2787    
2788            if (slength == -2 && md->partial != 0 &&            if (slength == -2 && md->partial != 0 &&
2789                md->end_subject > md->start_used_ptr)                md->end_subject > md->start_used_ptr)
2790              {              {
2791              md->hitend = TRUE;              md->hitend = TRUE;
2792              if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);              if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
2793              }              }
# Line 2791  for (;;) Line 2795  for (;;)
2795            }            }
2796          eptr += slength;          eptr += slength;
2797          }          }
2798    
2799        while (eptr >= pp)        while (eptr >= pp)
2800          {          {
2801          RMATCH(eptr, ecode, offset_top, md, eptrb, RM15);          RMATCH(eptr, ecode, offset_top, md, eptrb, RM15);
# Line 4228  for (;;) Line 4232  for (;;)
4232              if (UCD_CATEGORY(c) != ucp_M) break;              if (UCD_CATEGORY(c) != ucp_M) break;
4233              eptr += len;              eptr += len;
4234              }              }
4235            CHECK_PARTIAL();            CHECK_PARTIAL();
4236            }            }
4237          }          }
4238    
# Line 4252  for (;;) Line 4256  for (;;)
4256            if (md->partial != 0 &&            if (md->partial != 0 &&
4257                eptr + 1 >= md->end_subject &&                eptr + 1 >= md->end_subject &&
4258                NLBLOCK->nltype == NLTYPE_FIXED &&                NLBLOCK->nltype == NLTYPE_FIXED &&
4259                NLBLOCK->nllen == 2 &&                NLBLOCK->nllen == 2 &&
4260                *eptr == NLBLOCK->nl[0])                *eptr == NLBLOCK->nl[0])
4261              {              {
4262              md->hitend = TRUE;              md->hitend = TRUE;
4263              if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);              if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
4264              }              }
# Line 4545  for (;;) Line 4549  for (;;)
4549            if (md->partial != 0 &&            if (md->partial != 0 &&
4550                eptr + 1 >= md->end_subject &&                eptr + 1 >= md->end_subject &&
4551                NLBLOCK->nltype == NLTYPE_FIXED &&                NLBLOCK->nltype == NLTYPE_FIXED &&
4552                NLBLOCK->nllen == 2 &&                NLBLOCK->nllen == 2 &&
4553                *eptr == NLBLOCK->nl[0])                *eptr == NLBLOCK->nl[0])
4554              {              {
4555              md->hitend = TRUE;              md->hitend = TRUE;
4556              if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);              if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
4557              }              }
# Line 5031  for (;;) Line 5035  for (;;)
5035              if (UCD_CATEGORY(c) != ucp_M) break;              if (UCD_CATEGORY(c) != ucp_M) break;
5036              eptr += len;              eptr += len;
5037              }              }
5038            CHECK_PARTIAL();            CHECK_PARTIAL();
5039            }            }
5040          }          }
5041        else        else
# Line 5059  for (;;) Line 5063  for (;;)
5063              if (md->partial != 0 &&    /* Take care with CRLF partial */              if (md->partial != 0 &&    /* Take care with CRLF partial */
5064                  eptr >= md->end_subject &&                  eptr >= md->end_subject &&
5065                  NLBLOCK->nltype == NLTYPE_FIXED &&                  NLBLOCK->nltype == NLTYPE_FIXED &&
5066                  NLBLOCK->nllen == 2 &&                  NLBLOCK->nllen == 2 &&
5067                  c == NLBLOCK->nl[0])                  c == NLBLOCK->nl[0])
5068                {                {
5069                md->hitend = TRUE;                md->hitend = TRUE;
5070                if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);                if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
5071                }                }
5072              break;              break;
5073    
5074              case OP_ALLANY:              case OP_ALLANY:
5075              case OP_ANYBYTE:              case OP_ANYBYTE:
5076              break;              break;
# Line 5233  for (;;) Line 5237  for (;;)
5237              if (md->partial != 0 &&    /* Take care with CRLF partial */              if (md->partial != 0 &&    /* Take care with CRLF partial */
5238                  eptr >= md->end_subject &&                  eptr >= md->end_subject &&
5239                  NLBLOCK->nltype == NLTYPE_FIXED &&                  NLBLOCK->nltype == NLTYPE_FIXED &&
5240                  NLBLOCK->nllen == 2 &&                  NLBLOCK->nllen == 2 &&
5241                  c == NLBLOCK->nl[0])                  c == NLBLOCK->nl[0])
5242                {                {
5243                md->hitend = TRUE;                md->hitend = TRUE;
5244                if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);                if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
5245                }                }
5246              break;              break;
5247    
5248              case OP_ALLANY:              case OP_ALLANY:
5249              case OP_ANYBYTE:              case OP_ANYBYTE:
5250              break;              break;
# Line 5597  for (;;) Line 5601  for (;;)
5601              if (UCD_CATEGORY(c) != ucp_M) break;              if (UCD_CATEGORY(c) != ucp_M) break;
5602              eptr += len;              eptr += len;
5603              }              }
5604            CHECK_PARTIAL();            CHECK_PARTIAL();
5605            }            }
5606    
5607          /* eptr is now past the end of the maximum run */          /* eptr is now past the end of the maximum run */
# Line 5644  for (;;) Line 5648  for (;;)
5648                if (md->partial != 0 &&    /* Take care with CRLF partial */                if (md->partial != 0 &&    /* Take care with CRLF partial */
5649                    eptr + 1 >= md->end_subject &&                    eptr + 1 >= md->end_subject &&
5650                    NLBLOCK->nltype == NLTYPE_FIXED &&                    NLBLOCK->nltype == NLTYPE_FIXED &&
5651                    NLBLOCK->nllen == 2 &&                    NLBLOCK->nllen == 2 &&
5652                    *eptr == NLBLOCK->nl[0])                    *eptr == NLBLOCK->nl[0])
5653                  {                  {
5654                  md->hitend = TRUE;                  md->hitend = TRUE;
5655                  if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);                  if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
5656                  }                  }
# Line 5670  for (;;) Line 5674  for (;;)
5674                if (md->partial != 0 &&    /* Take care with CRLF partial */                if (md->partial != 0 &&    /* Take care with CRLF partial */
5675                    eptr + 1 >= md->end_subject &&                    eptr + 1 >= md->end_subject &&
5676                    NLBLOCK->nltype == NLTYPE_FIXED &&                    NLBLOCK->nltype == NLTYPE_FIXED &&
5677                    NLBLOCK->nllen == 2 &&                    NLBLOCK->nllen == 2 &&
5678                    *eptr == NLBLOCK->nl[0])                    *eptr == NLBLOCK->nl[0])
5679                  {                  {
5680                  md->hitend = TRUE;                  md->hitend = TRUE;
5681                  if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);                  if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
5682                  }                  }
# Line 5943  for (;;) Line 5947  for (;;)
5947              if (md->partial != 0 &&    /* Take care with CRLF partial */              if (md->partial != 0 &&    /* Take care with CRLF partial */
5948                  eptr + 1 >= md->end_subject &&                  eptr + 1 >= md->end_subject &&
5949                  NLBLOCK->nltype == NLTYPE_FIXED &&                  NLBLOCK->nltype == NLTYPE_FIXED &&
5950                  NLBLOCK->nllen == 2 &&                  NLBLOCK->nllen == 2 &&
5951                  *eptr == NLBLOCK->nl[0])                  *eptr == NLBLOCK->nl[0])
5952                {                {
5953                md->hitend = TRUE;                md->hitend = TRUE;
5954                if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);                if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
5955                }                }
# Line 6279  Undefine all the macros that were define Line 6283  Undefine all the macros that were define
6283  ***************************************************************************/  ***************************************************************************/
6284    
6285    
6286    #ifdef NO_RECURSE
6287    /*************************************************
6288    *          Release allocated heap frames         *
6289    *************************************************/
6290    
6291    /* This function releases all the allocated frames. The base frame is on the
6292    machine stack, and so must not be freed.
6293    
6294    Argument: the address of the base frame
6295    Returns:  nothing
6296    */
6297    
6298    static void
6299    release_match_heapframes (heapframe *frame_base)
6300    {
6301    heapframe *nextframe = frame_base->Xnextframe;
6302    while (nextframe != NULL)
6303      {
6304      heapframe *oldframe = nextframe;
6305      nextframe = nextframe->Xnextframe;
6306      (PUBL(stack_free))(oldframe);
6307      }
6308    }
6309    #endif
6310    
6311    
6312  /*************************************************  /*************************************************
6313  *         Execute a Regular Expression           *  *         Execute a Regular Expression           *
# Line 6341  PCRE_PUCHAR req_char_ptr = start_match - Line 6370  PCRE_PUCHAR req_char_ptr = start_match -
6370  const pcre_study_data *study;  const pcre_study_data *study;
6371  const REAL_PCRE *re = (const REAL_PCRE *)argument_re;  const REAL_PCRE *re = (const REAL_PCRE *)argument_re;
6372    
6373    #ifdef NO_RECURSE
6374    heapframe frame_zero;
6375    frame_zero.Xprevframe = NULL;            /* Marks the top level */
6376    frame_zero.Xnextframe = NULL;            /* None are allocated yet */
6377    md->match_frames_base = &frame_zero;
6378    #endif
6379    
6380  /* Check for the special magic call that measures the size of the stack used  /* Check for the special magic call that measures the size of the stack used
6381  per recursive call of match(). Without the funny casting for sizeof, a Windows  per recursive call of match(). Without the funny casting for sizeof, a Windows
6382  compiler gave this error: "unary minus operator applied to unsigned type,  compiler gave this error: "unary minus operator applied to unsigned type,
6383  result still unsigned". Hopefully the cast fixes that. */  result still unsigned". Hopefully the cast fixes that. */
6384    
# Line 6430  if (extra_data != NULL Line 6466  if (extra_data != NULL
6466    rc = PRIV(jit_exec)(re, extra_data->executable_jit,    rc = PRIV(jit_exec)(re, extra_data->executable_jit,
6467      (const pcre_uchar *)subject, length, start_offset, options,      (const pcre_uchar *)subject, length, start_offset, options,
6468      ((extra_data->flags & PCRE_EXTRA_MATCH_LIMIT) == 0)      ((extra_data->flags & PCRE_EXTRA_MATCH_LIMIT) == 0)
6469      ? MATCH_LIMIT : extra_data->match_limit, offsets, offsetcount);      ? MATCH_LIMIT : extra_data->match_limit, offsets, offsetcount,
6470        ((extra_data->flags & PCRE_EXTRA_MARK) != 0) ? extra_data->mark : NULL);
6471    
6472    /* PCRE_ERROR_NULL means that the selected normal or partial matching    /* PCRE_ERROR_NULL means that the selected normal or partial matching
6473    mode is not compiled. In this case we simply fallback to interpreter. */    mode is not compiled. In this case we simply fallback to interpreter. */
6474    
6475    if (rc != PCRE_ERROR_NULL)     /* JIT was used */    if (rc != PCRE_ERROR_NULL) return rc;
     {  
     ((pcre_extra *)extra_data)->flags |= PCRE_EXTRA_USED_JIT;  
     return rc;  
     }  
6476    }    }
6477  #endif  #endif
6478    
# Line 6474  if (extra_data != NULL) Line 6507  if (extra_data != NULL)
6507    if ((flags & PCRE_EXTRA_CALLOUT_DATA) != 0)    if ((flags & PCRE_EXTRA_CALLOUT_DATA) != 0)
6508      md->callout_data = extra_data->callout_data;      md->callout_data = extra_data->callout_data;
6509    if ((flags & PCRE_EXTRA_TABLES) != 0) tables = extra_data->tables;    if ((flags & PCRE_EXTRA_TABLES) != 0) tables = extra_data->tables;
   ((pcre_extra *)extra_data)->flags &= ~PCRE_EXTRA_USED_JIT;   /* JIT not used */  
6510    }    }
6511    
6512  /* If the exec call supplied NULL for tables, use the inbuilt ones. This  /* If the exec call supplied NULL for tables, use the inbuilt ones. This
# Line 7056  if (rc == MATCH_MATCH || rc == MATCH_ACC Line 7088  if (rc == MATCH_MATCH || rc == MATCH_ACC
7088    if (extra_data != NULL && (extra_data->flags & PCRE_EXTRA_MARK) != 0)    if (extra_data != NULL && (extra_data->flags & PCRE_EXTRA_MARK) != 0)
7089      *(extra_data->mark) = (pcre_uchar *)md->mark;      *(extra_data->mark) = (pcre_uchar *)md->mark;
7090    DPRINTF((">>>> returning %d\n", rc));    DPRINTF((">>>> returning %d\n", rc));
7091    #ifdef NO_RECURSE
7092      release_match_heapframes(&frame_zero);
7093    #endif
7094    return rc;    return rc;
7095    }    }
7096    
# Line 7073  if (using_temporary_offsets) Line 7108  if (using_temporary_offsets)
7108  if (rc != MATCH_NOMATCH && rc != PCRE_ERROR_PARTIAL)  if (rc != MATCH_NOMATCH && rc != PCRE_ERROR_PARTIAL)
7109    {    {
7110    DPRINTF((">>>> error: returning %d\n", rc));    DPRINTF((">>>> error: returning %d\n", rc));
7111    #ifdef NO_RECURSE
7112      release_match_heapframes(&frame_zero);
7113    #endif
7114    return rc;    return rc;
7115    }    }
7116    
# Line 7102  else Line 7140  else
7140    
7141  if (extra_data != NULL && (extra_data->flags & PCRE_EXTRA_MARK) != 0)  if (extra_data != NULL && (extra_data->flags & PCRE_EXTRA_MARK) != 0)
7142    *(extra_data->mark) = (pcre_uchar *)md->nomatch_mark;    *(extra_data->mark) = (pcre_uchar *)md->nomatch_mark;
7143    #ifdef NO_RECURSE
7144      release_match_heapframes(&frame_zero);
7145    #endif
7146  return rc;  return rc;
7147  }  }
7148    

Legend:
Removed from v.924  
changed lines
  Added in v.933

  ViewVC Help
Powered by ViewVC 1.1.5