Index: lib/uri/common.rb =================================================================== --- lib/uri/common.rb (revision 48392) +++ lib/uri/common.rb (working copy) @@ -152,6 +152,10 @@ # URI is valid, bad usage is not. # class BadURIError < Error; end + # + # The "%"-encoding of a URI part is invalid + # + class InvalidPercentEncoding < ArgumentError; end # # == Synopsis @@ -379,7 +383,7 @@ # # See URI.encode_www_form_component, URI.decode_www_form def self.decode_www_form_component(str, enc=Encoding::UTF_8) - raise ArgumentError, "invalid %-encoding (#{str})" if /%(?!\h\h)/ =~ str + raise InvalidPercentEncoding, "invalid %-encoding (#{str})" if /%(?!\h\h)/ =~ str str.b.gsub(/\+|%\h\h/, TBLDECWWWCOMP_).force_encoding(enc) end Index: test/uri/test_common.rb =================================================================== --- test/uri/test_common.rb (revision 48392) +++ test/uri/test_common.rb (working copy) @@ -99,10 +99,10 @@ assert_equal("\xE3\x81\x82\xE3\x81\x82".force_encoding("UTF-8"), URI.decode_www_form_component("\xE3\x81\x82%E3%81%82".force_encoding("UTF-8"))) - assert_raise(ArgumentError){URI.decode_www_form_component("%")} - assert_raise(ArgumentError){URI.decode_www_form_component("%a")} - assert_raise(ArgumentError){URI.decode_www_form_component("x%a_")} - assert_nothing_raised(ArgumentError){URI.decode_www_form_component("x"*(1024*1024))} + assert_raise(InvalidPercentEncoding){URI.decode_www_form_component("%")} + assert_raise(InvalidPercentEncoding){URI.decode_www_form_component("%a")} + assert_raise(InvalidPercentEncoding){URI.decode_www_form_component("x%a_")} + assert_nothing_raised(InvalidPercentEncoding){URI.decode_www_form_component("x"*(1024*1024))} end def test_encode_www_form