home *** CD-ROM | disk | FTP | other *** search
- To: vim-dev@vim.org
- Subject: Patch 6.0.149
- Fcc: outbox
- From: Bram Moolenaar <Bram@moolenaar.net>
- MIME-Version: 1.0
- Content-Type: text/plain; charset=ISO-8859-1
- Content-Transfer-Encoding: 8bit
- ------------
-
- Patch 6.0.149
- Problem: The pattern "\(.\{-}\)*" causes a hang. When using a search
- pattern that causes a stack overflow to be detected Vim could
- still hang.
- Solution: Correctly report "operand could be empty" when using "\{-}".
- Check for "out_of_stack" inside loops to avoid a hang.
- Files: src/regexp.c
-
-
- *** ../vim60.148/src/regexp.c Mon Nov 5 09:00:25 2001
- --- src/regexp.c Tue Jan 22 17:39:43 2002
- ***************
- *** 1305,1311 ****
- reginsert_limits(BRACE_LIMITS, minval, maxval, ret);
- ++num_complex_braces;
- }
- ! if (minval > 0)
- *flagp = (HASWIDTH | (flags & HASNL));
- break;
- }
- --- 1305,1311 ----
- reginsert_limits(BRACE_LIMITS, minval, maxval, ret);
- ++num_complex_braces;
- }
- ! if (minval > 0 && maxval > 0)
- *flagp = (HASWIDTH | (flags & HASNL));
- break;
- }
- ***************
- *** 3083,3089 ****
- #endif
- while (scan != NULL)
- {
- ! if (got_int)
- return FALSE;
- #ifdef DEBUG
- if (regnarrate)
- --- 3083,3089 ----
- #endif
- while (scan != NULL)
- {
- ! if (got_int || out_of_stack)
- return FALSE;
- #ifdef DEBUG
- if (regnarrate)
- ***************
- *** 3676,3682 ****
- reg_nextline();
- ++clnum;
- ccol = 0;
- ! if (got_int)
- return FALSE;
- }
-
- --- 3676,3682 ----
- reg_nextline();
- ++clnum;
- ccol = 0;
- ! if (got_int || out_of_stack)
- return FALSE;
- }
-
- ***************
- *** 3906,3912 ****
- regline = reg_getline(reglnum);
- reginput = regline + STRLEN(regline);
- fast_breakcheck();
- ! if (got_int)
- return FALSE;
- }
- else
- --- 3906,3912 ----
- regline = reg_getline(reglnum);
- reginput = regline + STRLEN(regline);
- fast_breakcheck();
- ! if (got_int || out_of_stack)
- return FALSE;
- }
- else
- ***************
- *** 3941,3947 ****
- || regrepeat(OPERAND(scan), 1L) == 0)
- break;
- ++count;
- ! if (got_int)
- return FALSE;
- }
- }
- --- 3941,3947 ----
- || regrepeat(OPERAND(scan), 1L) == 0)
- break;
- ++count;
- ! if (got_int || out_of_stack)
- return FALSE;
- }
- }
- *** ../vim60.148/src/version.c Tue Jan 22 16:51:24 2002
- --- src/version.c Tue Jan 22 17:35:49 2002
- ***************
- *** 608,609 ****
- --- 608,611 ----
- { /* Add new patch number below this line */
- + /**/
- + 149,
- /**/
-
- --
- A fine is a tax for doing wrong. A tax is a fine for doing well.
-
- /// Bram Moolenaar -- Bram@moolenaar.net -- http://www.moolenaar.net \\\
- ((( Creator of Vim -- http://vim.sf.net -- ftp://ftp.vim.org/pub/vim )))
- \\\ Help me helping AIDS orphans in Uganda - http://iccf-holland.org ///
-