From: Andreas Schwab Date: Sun, 16 Mar 2008 10:45:53 +0000 (+0000) Subject: (re_match_2_internal): Correct matching of a charset X-Git-Url: https://git.hcoop.net/bpt/emacs.git/commitdiff_plain/f50201817b3729dda94ce7bd0f7e2cb5371d0340 (re_match_2_internal): Correct matching of a charset against latin-1 characters. --- diff --git a/src/ChangeLog b/src/ChangeLog index 687951808f..2b7e7f8e3c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2008-03-16 Andreas Schwab + + * regex.c (re_match_2_internal): Correct matching of a charset + against latin-1 characters. + 2008-03-16 Kenichi Handa * coding.c (CHAR_STRING_ADVANCE_NO_UNIFY) diff --git a/src/regex.c b/src/regex.c index 1400a7daa7..9f2a42b487 100644 --- a/src/regex.c +++ b/src/regex.c @@ -5648,6 +5648,9 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop) in the initial byte-length of the command. */ int count = 0; + /* Whether matching against a unibyte character. */ + boolean unibyte_char = false; + DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : ""); range_table_exists = CHARSET_RANGE_TABLE_EXISTS_P (&p[-1]); @@ -5667,7 +5670,10 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop) c = TRANSLATE (c); c1 = RE_CHAR_TO_UNIBYTE (c); if (c1 >= 0) - c = c1; + { + unibyte_char = true; + c = c1; + } } else { @@ -5678,11 +5684,14 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop) c1 = TRANSLATE (c1); c1 = RE_CHAR_TO_UNIBYTE (c1); if (c1 >= 0) - c = c1; + { + unibyte_char = true; + c = c1; + } } } - if (c < (1 << BYTEWIDTH)) + if (unibyte_char && c < (1 << BYTEWIDTH)) { /* Lookup bitmap. */ /* Cast to `unsigned' instead of `unsigned char' in case the bit list is a full 32 bytes long. */