regex: fix false multibyte matches in some regular expressions
authorStanislav Brabec <sbrabec@suse.cz>
Fri, 24 Feb 2012 20:24:44 +0000 (12:24 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 24 Feb 2012 20:25:34 +0000 (12:25 -0800)
See <http://sourceware.org/bugzilla/show_bug.cgi?id=13637>
and <http://sourceware.org/ml/libc-alpha/2012-02/msg00521.html>.
* lib/regex_internal.c (re_string_skip_chars):
Fix miscomputation of remain_len that may cause incomplete
multi-byte character and false match.

ChangeLog
lib/regex_internal.c

index 681d773..53680d8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2012-02-24  Stanislav Brabec  <sbrabec@suse.cz>  (tiny change)
+
+       regex: fix false multibyte matches in some regular expressions
+       See <http://sourceware.org/bugzilla/show_bug.cgi?id=13637>
+       and <http://sourceware.org/ml/libc-alpha/2012-02/msg00521.html>.
+       * lib/regex_internal.c (re_string_skip_chars):
+       Fix miscomputation of remain_len that may cause incomplete
+       multi-byte character and false match.
+
 2012-02-24  Jim Meyering  <meyering@redhat.com>
 
        maint.mk: tell sc_prohibit_strcmp to ding "0 == strcmp (...)", too
index aa14033..7e8c1bc 100644 (file)
@@ -498,7 +498,7 @@ re_string_skip_chars (re_string_t *pstr, Idx new_raw_idx, wint_t *last_wc)
        rawbuf_idx < new_raw_idx;)
     {
       wchar_t wc2;
-      Idx remain_len = pstr->len - rawbuf_idx;
+      Idx remain_len = pstr->raw_len - rawbuf_idx;
       prev_st = pstr->cur_state;
       mbclen = __mbrtowc (&wc2, (const char *) pstr->raw_mbs + rawbuf_idx,
                          remain_len, &pstr->cur_state);