diff --git a/ChangeLog b/ChangeLog index 6791507c7e..3a54f7e546 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Jul 26 18:38:13 2006 Minero Aoki + + * ext/strscan/strscan.c (strscan_do_scan): always return nil if + p->curr exceeds string size. + Wed Jul 26 18:33:31 2006 Yukihiro Matsumoto * eval.c (Init_eval): rename #invoke_method and diff --git a/ext/strscan/strscan.c b/ext/strscan/strscan.c index dcb70a7747..9529bc3693 100644 --- a/ext/strscan/strscan.c +++ b/ext/strscan/strscan.c @@ -1,7 +1,7 @@ /* $Id$ - Copyright (c) 1999-2005 Minero Aoki + Copyright (c) 1999-2006 Minero Aoki This program is free software. You can distribute/modify this program under the terms of @@ -401,6 +401,9 @@ strscan_do_scan(VALUE self, VALUE regex, int succptr, int getstr, int headonly) GET_SCANNER(self, p); CLEAR_MATCH_STATUS(p); + if (S_RESTLEN(p) < 0) { + return Qnil; + } if (headonly) { ret = onig_match(RREGEXP(regex)->ptr, (UChar* )CURPTR(p), (UChar* )(CURPTR(p) + S_RESTLEN(p)),