Ticket #4132: patchfile.patch

File patchfile.patch, 2.9 KB (added by Gavin Stokes <stokestack@…>, 13 years ago)

patch to basic_regex_creator.hpp and perl_matcher_common.hpp

  • basic_regex_creator.hpp

     
    769769      case syntax_element_assert_backref:
    770770         {
    771771            // just check that the index is valid:
    772             int id = static_cast<const re_brace*>(state)->index;
    773             if(id < 0)
     772            int idx = static_cast<const re_brace*>(state)->index;
     773            if(idx < 0)
    774774            {
    775                id = -id-1;
    776                if(id >= 10000)
     775               idx = -idx-1;
     776               if(idx >= 10000)
    777777               {
    778                   id = m_pdata->get_id(id);
    779                   if(id <= 0)
     778                  idx = m_pdata->get_id(idx);
     779                  if(idx <= 0)
    780780                  {
    781781                     // check of sub-expression that doesn't exist:
    782782                     if(0 == this->m_pdata->m_status) // update the error code if not already set
     
    804804         {
    805805            bool ok = false;
    806806            re_syntax_base* p = base;
    807             std::ptrdiff_t id = static_cast<re_jump*>(state)->alt.i;
    808             if(id > 10000)
    809                id = m_pdata->get_id(id);
     807            std::ptrdiff_t idx = static_cast<re_jump*>(state)->alt.i;
     808            if(idx > 10000)
     809               idx = m_pdata->get_id(idx);
    810810            while(p)
    811811            {
    812                if((p->type == syntax_element_startmark) && (static_cast<re_brace*>(p)->index == id))
     812               if((p->type == syntax_element_startmark) && (static_cast<re_brace*>(p)->index == idx))
    813813               {
    814814                  //
    815815                  // We've found the target of the recursion, set the jump target:
     
    833833                        next_rep_id = static_cast<re_repeat*>(p)->state_id;
    834834                        break;
    835835                     case syntax_element_endmark:
    836                         if(static_cast<const re_brace*>(p)->index == id)
     836                        if(static_cast<const re_brace*>(p)->index == idx)
    837837                           next_rep_id = -1;
    838838                        break;
    839839                     default:
  • perl_matcher_common.hpp

     
    732732   {
    733733      // Have we recursed into subexpression "index"?
    734734      // If index == 0 then check for any recursion at all, otherwise for recursion to -index-1.
    735       int id = -index-1;
    736       if(id >= 10000)
    737          id = re.get_data().get_id(id);
    738       result = !recursion_stack.empty() && ((recursion_stack.back().id == id) || (index == 0));
     735      int idx = -index-1;
     736      if(idx >= 10000)
     737         idx = re.get_data().get_id(idx);
     738      result = !recursion_stack.empty() && ((recursion_stack.back().idx == idx) || (index == 0));
    739739      pstate = pstate->next.p;
    740740   }
    741741   return result;