From 65a8185eb212639875ae8db14dfffb1fa06b71e9 Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 22 Jan 2008 03:59:53 +0000 Subject: * configure.in (MINIRUBY): remove -I$(EXTOUT)/$(arch) from MINIRUBY since miniruby might not be able to load DLL. * test/ruby/test_m17n.rb: move tests from bootstrap test. * encoding.c (enc_find): should check name if ASCII compatible. * string.c (rb_str_end_with): should check character boundary. * encoding.c (rb_enc_compatible): encoding must be ASCII compatible before checking ENC_CODERANGE_7BIT. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15167 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- encoding.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'encoding.c') diff --git a/encoding.c b/encoding.c index 328f2d4742..f429f2c816 100644 --- a/encoding.c +++ b/encoding.c @@ -640,7 +640,7 @@ rb_encoding* rb_enc_compatible(VALUE str1, VALUE str2) { int idx1, idx2; - rb_encoding *enc; + rb_encoding *enc1, *enc2; idx1 = rb_enc_get_index(str1); idx2 = rb_enc_get_index(str2); @@ -648,6 +648,10 @@ rb_enc_compatible(VALUE str1, VALUE str2) if (idx1 == idx2) { return rb_enc_from_index(idx1); } + enc1 = rb_enc_from_index(idx1); + enc2 = rb_enc_from_index(idx2); + if (!rb_enc_asciicompat(enc1) || !rb_enc_asciicompat(enc2)) + return 0; if (BUILTIN_TYPE(str1) != T_STRING) { VALUE tmp = str1; int idx0 = idx1; @@ -664,17 +668,15 @@ rb_enc_compatible(VALUE str1, VALUE str2) cr2 = rb_enc_str_coderange(str2); if (cr1 != cr2) { /* may need to handle ENC_CODERANGE_BROKEN */ - 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 enc2; } if (cr2 == ENC_CODERANGE_7BIT) { - if (idx1 == 0) return rb_enc_from_index(idx2); - return rb_enc_from_index(idx1); + if (idx1 == 0) return enc2; + return enc1; } } - if (cr1 == ENC_CODERANGE_7BIT && - rb_enc_asciicompat(enc = rb_enc_from_index(idx2))) - return enc; + if (cr1 == ENC_CODERANGE_7BIT) + return enc2; } return 0; } @@ -908,7 +910,11 @@ static VALUE enc_find(VALUE klass, VALUE enc) { int idx; + if (SYMBOL_P(enc)) enc = rb_id2str(SYM2ID(enc)); + if (!rb_enc_asciicompat(rb_enc_get(enc))) { + rb_raise(rb_eArgError, "invalid name encoding (non ASCII)"); + } idx = rb_enc_find_index(StringValueCStr(enc)); if (idx < 0) { rb_raise(rb_eArgError, "unknown encoding name - %s", RSTRING_PTR(enc)); -- cgit v1.2.3