summaryrefslogtreecommitdiff
path: root/lib/rexml/encoding.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rexml/encoding.rb')
-rw-r--r--lib/rexml/encoding.rb18
1 files changed, 10 insertions, 8 deletions
diff --git a/lib/rexml/encoding.rb b/lib/rexml/encoding.rb
index f003d6cc3b..e35c3acf7c 100644
--- a/lib/rexml/encoding.rb
+++ b/lib/rexml/encoding.rb
@@ -24,21 +24,22 @@ module REXML
old_verbosity = $VERBOSE
begin
$VERBOSE = false
- return if defined? @encoding and enc == @encoding
+ enc = enc.nil? ? nil : enc.upcase
+ return false if defined? @encoding and enc == @encoding
if enc and enc != UTF_8
- @encoding = enc.upcase
+ @encoding = enc
+ raise ArgumentError, "Bad encoding name #@encoding" unless @encoding =~ /^[\w-]+$/
+ @encoding.untaint
begin
require 'rexml/encodings/ICONV.rb'
Encoding.apply(self, "ICONV")
- rescue LoadError, Exception => err
- raise ArgumentError, "Bad encoding name #@encoding" unless @encoding =~ /^[\w-]+$/
- @encoding.untaint
- enc_file = File.join( "rexml", "encodings", "#@encoding.rb" )
+ rescue LoadError, Exception
begin
+ enc_file = File.join( "rexml", "encodings", "#@encoding.rb" )
require enc_file
Encoding.apply(self, @encoding)
- rescue LoadError
- puts $!.message
+ rescue LoadError => err
+ puts err.message
raise ArgumentError, "No decoder found for encoding #@encoding. Please install iconv."
end
end
@@ -50,6 +51,7 @@ module REXML
ensure
$VERBOSE = old_verbosity
end
+ true
end
def check_encoding str