merge revision(s) 57501,58576: [Backport #13539]

escape.c: check argument

	* ext/cgi/escape/escape.c (optimized_unescape): check
	  accept_charset encoding argument.
	share `@@accept_charset`

	* lib/cgi/{core,util}.rb: include CGI::Util not only extending, to
	  share `@@accept_charset` class variable, so that it is always
	  accessible.  [ruby-core:80986] [Bug #13539]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@59511 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nagachika 2017-08-05 01:53:44 +00:00
parent 61277d473c
commit b2c7e9741e
5 changed files with 26 additions and 4 deletions

View file

@ -252,7 +252,8 @@ optimized_unescape(VALUE str, VALUE encoding)
long i, len, beg = 0; long i, len, beg = 0;
VALUE dest = 0; VALUE dest = 0;
const char *cstr; const char *cstr;
int cr, origenc, encidx = rb_to_encoding_index(encoding); rb_encoding *enc = rb_to_encoding(encoding);
int cr, origenc, encidx = rb_enc_to_index(enc);
len = RSTRING_LEN(str); len = RSTRING_LEN(str);
cstr = RSTRING_PTR(str); cstr = RSTRING_PTR(str);

View file

@ -4,6 +4,13 @@
# generating HTTP responses. # generating HTTP responses.
#++ #++
class CGI class CGI
unless const_defined?(:Util)
module Util
@@accept_charset = "UTF-8" # :nodoc:
end
include Util
extend Util
end
$CGI_ENV = ENV # for FCGI support $CGI_ENV = ENV # for FCGI support
@ -734,7 +741,7 @@ class CGI
# #
# CGI.accept_charset = "EUC-JP" # CGI.accept_charset = "EUC-JP"
# #
@@accept_charset="UTF-8" @@accept_charset="UTF-8" if false # needed for rdoc?
# Return the accept character set for all new CGI instances. # Return the accept character set for all new CGI instances.
def self.accept_charset def self.accept_charset

View file

@ -1,5 +1,9 @@
# frozen_string_literal: false # frozen_string_literal: false
class CGI; module Util; end; extend Util; end class CGI
module Util; end
include Util
extend Util
end
module CGI::Util module CGI::Util
@@accept_charset="UTF-8" unless defined?(@@accept_charset) @@accept_charset="UTF-8" unless defined?(@@accept_charset)
# URL-encode a string. # URL-encode a string.

View file

@ -53,6 +53,16 @@ class CGIUtilTest < Test::Unit::TestCase
assert_equal(Encoding::UTF_8, CGI::unescape("%C0%3C%3C".force_encoding("UTF-8")).encoding) assert_equal(Encoding::UTF_8, CGI::unescape("%C0%3C%3C".force_encoding("UTF-8")).encoding)
end end
def test_cgi_unescape_accept_charset
return unless defined?(::Encoding)
assert_raise(TypeError) {CGI.unescape('', nil)}
assert_separately(%w[-rcgi/util], "#{<<-"begin;"}\n#{<<-"end;"}")
begin;
assert_equal("", CGI.unescape(''))
end;
end
def test_cgi_pretty def test_cgi_pretty
assert_equal("<HTML>\n <BODY>\n </BODY>\n</HTML>\n",CGI::pretty("<HTML><BODY></BODY></HTML>")) assert_equal("<HTML>\n <BODY>\n </BODY>\n</HTML>\n",CGI::pretty("<HTML><BODY></BODY></HTML>"))
assert_equal("<HTML>\n\t<BODY>\n\t</BODY>\n</HTML>\n",CGI::pretty("<HTML><BODY></BODY></HTML>","\t")) assert_equal("<HTML>\n\t<BODY>\n\t</BODY>\n</HTML>\n",CGI::pretty("<HTML><BODY></BODY></HTML>","\t"))

View file

@ -1,6 +1,6 @@
#define RUBY_VERSION "2.4.2" #define RUBY_VERSION "2.4.2"
#define RUBY_RELEASE_DATE "2017-08-05" #define RUBY_RELEASE_DATE "2017-08-05"
#define RUBY_PATCHLEVEL 174 #define RUBY_PATCHLEVEL 175
#define RUBY_RELEASE_YEAR 2017 #define RUBY_RELEASE_YEAR 2017
#define RUBY_RELEASE_MONTH 8 #define RUBY_RELEASE_MONTH 8