mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* io.c (io_encoding_set): always warn if external encoding and internal
encoding are identical. [ruby-core:40727] [Bug #5568] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34997 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
272d72efc0
commit
db83618d2c
3 changed files with 43 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
Tue Mar 13 12:37:53 2012 NARUSE, Yui <naruse@ruby-lang.org>
|
||||||
|
|
||||||
|
* io.c (io_encoding_set): always warn if external encoding and internal
|
||||||
|
encoding are identical. [ruby-core:40727] [Bug #5568]
|
||||||
|
|
||||||
Tue Mar 13 12:37:03 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Tue Mar 13 12:37:03 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
Bug #5350
|
Bug #5350
|
||||||
|
|
13
io.c
13
io.c
|
@ -8743,11 +8743,22 @@ io_encoding_set(rb_io_t *fptr, VALUE v1, VALUE v2, VALUE opt)
|
||||||
enc = find_encoding(v2);
|
enc = find_encoding(v2);
|
||||||
if (enc == enc2) {
|
if (enc == enc2) {
|
||||||
/* Special case - "-" => no transcoding */
|
/* Special case - "-" => no transcoding */
|
||||||
|
VALUE tmp1 = rb_check_string_type(v1);
|
||||||
|
rb_warn("Ignoring internal encoding %s: it is identical to external encoding %s",
|
||||||
|
StringValueCStr(tmp), NIL_P(tmp1) ? rb_enc_name(enc) : StringValueCStr(tmp1));
|
||||||
enc2 = NULL;
|
enc2 = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
enc = find_encoding(v2);
|
enc = find_encoding(v2);
|
||||||
|
if (enc == enc2) {
|
||||||
|
/* Special case - "-" => no transcoding */
|
||||||
|
VALUE tmp1 = rb_check_string_type(v1);
|
||||||
|
rb_warn("Ignoring internal encoding %s: it is identical to external encoding %s",
|
||||||
|
rb_enc_name(enc), NIL_P(tmp1) ? rb_enc_name(enc) : StringValueCStr(tmp1));
|
||||||
|
enc2 = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
SET_UNIVERSAL_NEWLINE_DECORATOR_IF_ENC2(enc2, ecflags);
|
SET_UNIVERSAL_NEWLINE_DECORATOR_IF_ENC2(enc2, ecflags);
|
||||||
ecflags = rb_econv_prepare_options(opt, &ecopts, ecflags);
|
ecflags = rb_econv_prepare_options(opt, &ecopts, ecflags);
|
||||||
}
|
}
|
||||||
|
|
|
@ -984,6 +984,32 @@ EOT
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_set_encoding_identical
|
||||||
|
bug5568 = '[ruby-core:40727]'
|
||||||
|
open(__FILE__, "r") do |f|
|
||||||
|
assert_warn(/Ignoring internal encoding euc-jp: it is identical to external encoding eucjp/, bug5568) {
|
||||||
|
f.set_encoding("eucjp:euc-jp")
|
||||||
|
}
|
||||||
|
assert_warn(/Ignoring internal encoding euc-jp: it is identical to external encoding eucjp/, bug5568) {
|
||||||
|
f.set_encoding("eucjp", "euc-jp")
|
||||||
|
}
|
||||||
|
assert_warn(/Ignoring internal encoding euc-jp: it is identical to external encoding EUC-JP/, bug5568) {
|
||||||
|
f.set_encoding(Encoding::EUC_JP, "euc-jp")
|
||||||
|
}
|
||||||
|
assert_warn(/Ignoring internal encoding EUC-JP: it is identical to external encoding eucjp/, bug5568) {
|
||||||
|
f.set_encoding("eucjp", Encoding::EUC_JP)
|
||||||
|
}
|
||||||
|
assert_warn(/Ignoring internal encoding EUC-JP: it is identical to external encoding EUC-JP/, bug5568) {
|
||||||
|
f.set_encoding(Encoding::EUC_JP, Encoding::EUC_JP)
|
||||||
|
}
|
||||||
|
nonstr = Object.new
|
||||||
|
def nonstr.to_str; "eucjp"; end
|
||||||
|
assert_warn(/Ignoring internal encoding eucjp: it is identical to external encoding eucjp/, bug5568) {
|
||||||
|
f.set_encoding(nonstr, nonstr)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_set_encoding_undef
|
def test_set_encoding_undef
|
||||||
pipe(proc do |w|
|
pipe(proc do |w|
|
||||||
w << "\ufffd"
|
w << "\ufffd"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue