ruby-changes:1956
From: ko1@a...
Date: 15 Sep 2007 17:04:22 +0900
Subject: [ruby-changes:1956] nobu - Ruby:r13447 (trunk): * encoding.c (rb_enc_associate_index, rb_enc_get_index): check if
nobu 2007-09-15 17:04:10 +0900 (Sat, 15 Sep 2007) New Revision: 13447 Modified files: trunk/ChangeLog trunk/encoding.c trunk/string.c Log: * encoding.c (rb_enc_associate_index, rb_enc_get_index): check if object is encoding capable. [ruby-dev:31780] * string.c (rb_str_subpat_set): check for if the argument is a String. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/string.c?r1=13447&r2=13446 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13447&r2=13446 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/encoding.c?r1=13447&r2=13446 Index: encoding.c =================================================================== --- encoding.c (revision 13446) +++ encoding.c (revision 13447) @@ -79,9 +79,49 @@ return ONIG_ENCODING_ASCII; } +static int +enc_capable(VALUE obj) +{ + if (IMMEDIATE_P(obj)) return Qfalse; + switch (BUILTIN_TYPE(obj)) { + case T_STRING: + case T_REGEXP: + case T_FILE: + return Qtrue; + default: + return Qfalse; + } +} + +static void +enc_check_capable(VALUE x) +{ + if (!enc_capable(x)) { + const char *etype; + + if (NIL_P(x)) { + etype = "nil"; + } + else if (FIXNUM_P(x)) { + etype = "Fixnum"; + } + else if (SYMBOL_P(x)) { + etype = "Symbol"; + } + else if (rb_special_const_p(x)) { + etype = RSTRING_PTR(rb_obj_as_string(x)); + } + else { + etype = rb_obj_classname(x); + } + rb_raise(rb_eTypeError, "wrong argument type %s (not encode capable)", etype); + } +} + void rb_enc_associate_index(VALUE obj, int idx) { + enc_check_capable(obj); if (idx < ENCODING_INLINE_MAX) { ENCODING_SET(obj, idx); return; @@ -117,8 +157,10 @@ int rb_enc_get_index(VALUE obj) { - int i = ENCODING_GET(obj); + int i; + enc_check_capable(obj); + i = ENCODING_GET(obj); if (i == ENCODING_INLINE_MAX) { VALUE iv; Index: ChangeLog =================================================================== --- ChangeLog (revision 13446) +++ ChangeLog (revision 13447) @@ -1,3 +1,10 @@ +Sat Sep 15 17:04:08 2007 Nobuyoshi Nakada <nobu@r...> + + * encoding.c (rb_enc_associate_index, rb_enc_get_index): check if + object is encoding capable. [ruby-dev:31780] + + * string.c (rb_str_subpat_set): check for if the argument is a String. + Sat Sep 15 13:31:21 2007 Kouhei Sutou <kou@c...> * lib/rss.rb, lib/rss/, test/rss/: Index: string.c =================================================================== --- string.c (revision 13446) +++ string.c (revision 13447) @@ -1996,6 +1996,7 @@ } end = RMATCH(match)->END(nth); len = end - start; + StringValue(val); rb_enc_check(str, val); rb_str_splice_0(str, start, len, val); } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml