/[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 630 by ph10, Fri Jul 22 10:00:10 2011 UTC revision 645 by ph10, Sun Jul 31 17:02:18 2011 UTC
# Line 1070  for (;;) Line 1070  for (;;)
1070        if (pcre_callout != NULL)        if (pcre_callout != NULL)
1071          {          {
1072          pcre_callout_block cb;          pcre_callout_block cb;
1073          cb.version          = 1;   /* Version 1 of the callout block */          cb.version          = 2;   /* Version 1 of the callout block */
1074          cb.callout_number   = ecode[LINK_SIZE+2];          cb.callout_number   = ecode[LINK_SIZE+2];
1075          cb.offset_vector    = md->offset_vector;          cb.offset_vector    = md->offset_vector;
1076          cb.subject          = (PCRE_SPTR)md->start_subject;          cb.subject          = (PCRE_SPTR)md->start_subject;
# Line 1082  for (;;) Line 1082  for (;;)
1082          cb.capture_top      = offset_top/2;          cb.capture_top      = offset_top/2;
1083          cb.capture_last     = md->capture_last;          cb.capture_last     = md->capture_last;
1084          cb.callout_data     = md->callout_data;          cb.callout_data     = md->callout_data;
1085            cb.mark             = markptr;
1086          if ((rrc = (*pcre_callout)(&cb)) > 0) MRRETURN(MATCH_NOMATCH);          if ((rrc = (*pcre_callout)(&cb)) > 0) MRRETURN(MATCH_NOMATCH);
1087          if (rrc < 0) RRETURN(rrc);          if (rrc < 0) RRETURN(rrc);
1088          }          }
# Line 1464  for (;;) Line 1465  for (;;)
1465      if (pcre_callout != NULL)      if (pcre_callout != NULL)
1466        {        {
1467        pcre_callout_block cb;        pcre_callout_block cb;
1468        cb.version          = 1;   /* Version 1 of the callout block */        cb.version          = 2;   /* Version 1 of the callout block */
1469        cb.callout_number   = ecode[1];        cb.callout_number   = ecode[1];
1470        cb.offset_vector    = md->offset_vector;        cb.offset_vector    = md->offset_vector;
1471        cb.subject          = (PCRE_SPTR)md->start_subject;        cb.subject          = (PCRE_SPTR)md->start_subject;
# Line 1476  for (;;) Line 1477  for (;;)
1477        cb.capture_top      = offset_top/2;        cb.capture_top      = offset_top/2;
1478        cb.capture_last     = md->capture_last;        cb.capture_last     = md->capture_last;
1479        cb.callout_data     = md->callout_data;        cb.callout_data     = md->callout_data;
1480          cb.mark             = markptr;
1481        if ((rrc = (*pcre_callout)(&cb)) > 0) MRRETURN(MATCH_NOMATCH);        if ((rrc = (*pcre_callout)(&cb)) > 0) MRRETURN(MATCH_NOMATCH);
1482        if (rrc < 0) RRETURN(rrc);        if (rrc < 0) RRETURN(rrc);
1483        }        }
# Line 1501  for (;;) Line 1503  for (;;)
1503    
1504      case OP_RECURSE:      case OP_RECURSE:
1505        {        {
1506          recursion_info *ri;
1507          int recno;
1508    
1509        callpat = md->start_code + GET(ecode, 1);        callpat = md->start_code + GET(ecode, 1);
1510        new_recursive.group_num = (callpat == md->start_code)? 0 :        recno = (callpat == md->start_code)? 0 :
1511          GET2(callpat, 1 + LINK_SIZE);          GET2(callpat, 1 + LINK_SIZE);
1512    
1513          /* Check for repeating a recursion without advancing the subject pointer.
1514          This should catch convoluted mutual recursions. (Some simple cases are
1515          caught at compile time.) */
1516    
1517          for (ri = md->recursive; ri != NULL; ri = ri->prevrec)
1518            if (recno == ri->group_num && eptr == ri->subject_position)
1519              RRETURN(PCRE_ERROR_RECURSELOOP);
1520    
1521        /* Add to "recursing stack" */        /* Add to "recursing stack" */
1522    
1523          new_recursive.group_num = recno;
1524          new_recursive.subject_position = eptr;
1525        new_recursive.prevrec = md->recursive;        new_recursive.prevrec = md->recursive;
1526        md->recursive = &new_recursive;        md->recursive = &new_recursive;
1527    

Legend:
Removed from v.630  
changed lines
  Added in v.645

  ViewVC Help
Powered by ViewVC 1.1.5