From 93647e81a6d46c2e3f52618521a5b78b61e686d5 Mon Sep 17 00:00:00 2001 From: kou Date: Thu, 23 Oct 2014 08:23:10 +0000 Subject: [PATCH] * lib/rexml/source.rb (REXML::IOSource#encoding_updated): Fix a bug that can't parse XML correctly when Encoding.default_internal is different with XML encoding. REXML::Source converts XML encoding on read. So IO should not convert XML encoding. Based on patch by NAKAMURA Usaku. [ruby-dev:48686] [Bug #10418] * test/rexml/test_encoding.rb (REXMLTests::EncodingTester#test_parse_utf16_with_utf8_default_internal): Add the for the above case. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48109 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 14 ++++++++++++++ lib/rexml/source.rb | 2 +- test/rexml/test_encoding.rb | 9 +++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 2e3e5db8c7..b0891ca115 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +Thu Oct 23 17:19:04 2014 Kouhei Sutou + + * lib/rexml/source.rb (REXML::IOSource#encoding_updated): Fix a + bug that can't parse XML correctly when + Encoding.default_internal is different with XML + encoding. REXML::Source converts XML encoding on read. So IO + should not convert XML encoding. + Based on patch by NAKAMURA Usaku. + [ruby-dev:48686] [Bug #10418] + + * test/rexml/test_encoding.rb + (REXMLTests::EncodingTester#test_parse_utf16_with_utf8_default_internal): + Add the for the above case. + Thu Oct 23 16:29:02 2014 Kouhei Sutou * test/rexml/test_encoding.rb diff --git a/lib/rexml/source.rb b/lib/rexml/source.rb index a0bbe25de7..cfafdbd67a 100644 --- a/lib/rexml/source.rb +++ b/lib/rexml/source.rb @@ -285,7 +285,7 @@ module REXML case @encoding when "UTF-16BE", "UTF-16LE" @source.binmode - @source.set_encoding(@encoding) + @source.set_encoding(@encoding, @encoding) end @line_break = encode(">") @pending_buffer, @buffer = @buffer, "" diff --git a/test/rexml/test_encoding.rb b/test/rexml/test_encoding.rb index 9a41957faf..058fb974b2 100644 --- a/test/rexml/test_encoding.rb +++ b/test/rexml/test_encoding.rb @@ -94,5 +94,14 @@ module REXMLTests assert_equal("UTF-16", utf16.encoding) assert( utf16[0].kind_of?(REXML::XMLDecl)) end + + def test_parse_utf16_with_utf8_default_internal + EnvUtil.with_default_internal("UTF-8") do + utf16 = File.open(fixture_path("utf16.xml")) do |f| + REXML::Document.new(f) + end + assert_equal("UTF-16", utf16.encoding) + end + end end end