summaryrefslogtreecommitdiff
path: root/regexec.c
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-05-14 01:41:24 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-05-14 01:41:24 +0000
commite8905e1042009a1f8b3f43d8890b2cb7a9217053 (patch)
tree50d68e8293a6987f9f9090f7b330c9ab06ab15bc /regexec.c
parent95d36502f52f1c5d586841b93b18f33b8a28669f (diff)
* regexec.c (onig_search): fix problem with optimization of \z.
[Backport #8210] patched by k_tanaka at [ruby-core:54251]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@40713 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'regexec.c')
-rw-r--r--regexec.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/regexec.c b/regexec.c
index 55c28178c4..33b4a4efa6 100644
--- a/regexec.c
+++ b/regexec.c
@@ -3515,15 +3515,14 @@ onig_search(regex_t* reg, const UChar* str, const UChar* end,
start = min_semi_end - reg->anchor_dmax;
if (start < end)
start = onigenc_get_right_adjust_char_head(reg->enc, str, start, end);
- else { /* match with empty at end */
- start = onigenc_get_prev_char_head(reg->enc, str, end, end);
- }
}
if ((OnigDistance )(max_semi_end - (range - 1)) < reg->anchor_dmin) {
range = max_semi_end - reg->anchor_dmin + 1;
}
- if (start >= range) goto mismatch_no_msa;
+ if (start > range) goto mismatch_no_msa;
+ /* If start == range, match with empty at end.
+ Backward search is used. */
}
else {
if ((OnigDistance )(min_semi_end - range) > reg->anchor_dmax) {