diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | encoding.c | 5 | ||||
-rw-r--r-- | re.c | 3 | ||||
-rw-r--r-- | test/ruby/test_m17n.rb | 14 |
4 files changed, 18 insertions, 9 deletions
@@ -1,3 +1,8 @@ +Thu Dec 13 22:16:46 2007 Yukihiro Matsumoto <matz@ruby-lang.org> + + * encoding.c (rb_enc_compatible): encoding should never fall back + to ASCII-8BIT unless both encodings are ASCII-8BIT. + Thu Dec 13 20:31:28 2007 Tanaka Akira <akr@fsij.org> * string.c (rb_str_shared_replace): make str noembed after free. diff --git a/encoding.c b/encoding.c index 0562281d51..f297983cc2 100644 --- a/encoding.c +++ b/encoding.c @@ -397,7 +397,10 @@ rb_enc_compatible(VALUE str1, VALUE str2) if (cr1 == ENC_CODERANGE_7BIT) return rb_enc_from_index(idx2); if (cr2 == ENC_CODERANGE_7BIT) return rb_enc_from_index(idx1); } - if (cr1 == ENC_CODERANGE_7BIT) return rb_enc_from_index(0); + if (cr2 == ENC_CODERANGE_7BIT) { + if (idx1 == 0) return rb_enc_from_index(idx2); + if (idx2 == 0) return rb_enc_from_index(idx1); + } } if (cr1 == ENC_CODERANGE_7BIT && rb_enc_asciicompat(enc = rb_enc_from_index(idx2))) @@ -144,6 +144,7 @@ rb_memsearch(const void *x0, long m, const void *y0, long n) #define ARG_KCODE_EUC 1 #define ARG_KCODE_SJIS 2 #define ARG_KCODE_UTF8 3 +#define ARG_KCODE_MASK 3 static int char_to_option(int c) @@ -1968,7 +1969,7 @@ rb_reg_initialize(VALUE obj, const char *s, int len, rb_encoding *enc, if (unescaped == Qnil) return -1; - if (fixed_enc && (options & ARG_ENCODING_FIXED) && fixed_enc != enc) { + if (fixed_enc && fixed_enc != enc) { strcpy(err, "character encodings differ"); return -1; } diff --git a/test/ruby/test_m17n.rb b/test/ruby/test_m17n.rb index 10d9ed2f56..b3151c023a 100644 --- a/test/ruby/test_m17n.rb +++ b/test/ruby/test_m17n.rb @@ -447,13 +447,13 @@ class TestM17N < Test::Unit::TestCase end def test_regexp_unicode - assert_nothing_raised { eval '/\u{0}/' } - assert_nothing_raised { eval '/\u{D7FF}/' } - assert_raise(SyntaxError) { eval '/\u{D800}/' } - assert_raise(SyntaxError) { eval '/\u{DFFF}/' } - assert_nothing_raised { eval '/\u{E000}/' } - assert_nothing_raised { eval '/\u{10FFFF}/' } - assert_raise(SyntaxError) { eval '/\u{110000}/' } + assert_nothing_raised { eval '/\u{0}/u' } + assert_nothing_raised { eval '/\u{D7FF}/u' } + assert_raise(SyntaxError) { eval '/\u{D800}/u' } + assert_raise(SyntaxError) { eval '/\u{DFFF}/u' } + assert_nothing_raised { eval '/\u{E000}/u' } + assert_nothing_raised { eval '/\u{10FFFF}/u' } + assert_raise(SyntaxError) { eval '/\u{110000}/u' } end def test_regexp_mixed_unicode |