Patch 7.2.113
Problem:    Crash for substitute() call using submatch(1) while there is no
            such submatch. (Yukihiro Nakadaira)
Solution:   Also check the start of the submatch is set, it can be NULL when
            an attempted match didn't work out.
Files:      src/regexp.c


*** ../vim-7.2.112/src/regexp.c Fri Aug  8 13:45:31 2008
--- src/regexp.c        Sat Feb 21 21:46:49 2009
***************
*** 4532,4538 ****
                cleanup_subexpr();
                if (!REG_MULTI)         /* Single-line regexp */
                {
!                   if (reg_endp[no] == NULL)
                    {
                        /* Backref was not set: Match an empty string. */
                        len = 0;
--- 4532,4538 ----
                cleanup_subexpr();
                if (!REG_MULTI)         /* Single-line regexp */
                {
!                   if (reg_startp[no] == NULL || reg_endp[no] == NULL)
                    {
                        /* Backref was not set: Match an empty string. */
                        len = 0;
***************
*** 4548,4554 ****
                }
                else                            /* Multi-line regexp */
                {
!                   if (reg_endpos[no].lnum < 0)
                    {
                        /* Backref was not set: Match an empty string. */
                        len = 0;
--- 4548,4554 ----
                }
                else                            /* Multi-line regexp */
                {
!                   if (reg_startpos[no].lnum < 0 || reg_endpos[no].lnum < 0)
                    {
                        /* Backref was not set: Match an empty string. */
                        len = 0;
***************
*** 7279,7291 ****
      }
      else
      {
!       if (submatch_match->endp[no] == NULL)
            retval = NULL;
        else
-       {
-           s = submatch_match->startp[no];
            retval = vim_strnsave(s, (int)(submatch_match->endp[no] - s));
-       }
      }
  
      return retval;
--- 7279,7289 ----
      }
      else
      {
!       s = submatch_match->startp[no];
!       if (s == NULL || submatch_match->endp[no] == NULL)
            retval = NULL;
        else
            retval = vim_strnsave(s, (int)(submatch_match->endp[no] - s));
      }
  
      return retval;
*** ../vim-7.2.112/src/version.c        Sat Feb 21 21:22:44 2009
--- src/version.c       Sat Feb 21 22:01:56 2009
***************
*** 678,679 ****
--- 678,681 ----
  {   /* Add new patch number below this line */
+ /**/
+     113,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
103. When you find yourself in the "Computer" section of Barnes & Noble
     enjoying yourself.

 /// Bram Moolenaar -- b...@moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Raspunde prin e-mail lui