summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-03-18 08:47:48 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-03-18 08:47:48 +0000
commitae08a031a6560fee564a113f4ba7799430f887f7 (patch)
treed0fbfc339af319089b5032e2e17c732e3a3c11c9
parent15281f2e23d9a947626af5b64659520595bfd783 (diff)
extended regexp bug fix
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@128 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--regex.c8
-rw-r--r--sample/test.rb4
3 files changed, 10 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 3599a9cd11..de34d10280 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Wed Mar 18 17:46:31 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_match): forwading failure point popped too much.
+
Tue Mar 17 18:23:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
* math.c (math_frexp): newly added.
diff --git a/regex.c b/regex.c
index efc3bd782c..adac91d532 100644
--- a/regex.c
+++ b/regex.c
@@ -1848,7 +1848,7 @@ re_compile_pattern(pattern, size, bufp)
c1 = 0;
GET_UNSIGNED_NUMBER(c1);
- if (p < pend) PATUNFETCH;
+ if (!ISDIGIT(c)) PATUNFETCH;
if (c1 >= regnum) {
/* need to get octal */
@@ -2892,9 +2892,11 @@ re_match(bufp, string_arg, size, pos, regs)
/* If not end of string, try backtracking. Otherwise done. */
if (d != dend)
{
+ while (stackp != stackb && (int)stackp[-1] == 1)
+ POP_FAILURE_POINT();
if (stackp != stackb)
{
- /* More failure points to try. */
+ /* More failure points to try. */
/* If exceeds best match so far, save it. */
if (! best_regs_set || (d > best_regend[0]))
@@ -3419,8 +3421,6 @@ re_match(bufp, string_arg, size, pos, regs)
SET_REGS_MATCHED;
break;
}
- if (stackp != stackb && (int)stackp[-1] == 1)
- POP_FAILURE_POINT();
continue; /* Successfully executed one pattern command; keep going. */
/* Jump here if any matching operation fails. */
diff --git a/sample/test.rb b/sample/test.rb
index e413ada27a..a3f23a6d24 100644
--- a/sample/test.rb
+++ b/sample/test.rb
@@ -120,7 +120,7 @@ $bad = false
tmp = open("while_tmp", "r")
while tmp.gets()
if gsub!('vt100', 'VT100')
- p gsub!('VT100', 'Vt100')
+ gsub!('VT100', 'Vt100')
redo;
end
$bad = 1 if /vt100/;
@@ -296,7 +296,7 @@ ok(defined? "a".chomp)
ok("abc".scan(/./) == ["a", "b", "c"])
ok("1a2b3c".scan(/(\d.)/) == [["1a"], ["2b"], ["3c"]])
# non-greedy match
-ok("a=12;b=22".scan(/(.*?)=(\d*?);?/) == [["a", "12"], ["b", "22"]])
+ok("a=12;b=22".scan(/(.*?)=(\d*);?/) == [["a", "12"], ["b", "22"]])
$x = [1]
ok(($x * 5).join(":") == '1:1:1:1:1')