cgialt 0.0.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,24 @@
1
1
  ## $Rev$
2
- ## 0.0.2
3
- ## copyright(c) 2007 kuwata-lab.com all rights reserved.
2
+ ## 1.0.0
3
+ ## copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
4
+
5
+ - release: 1.0.0
6
+ date: 2008-11-09
7
+ enhancements:
8
+ - Ruby 1.9 support
9
+ - Add tests for 'cgialt/util.rb'.
10
+
11
+ changges:
12
+ - CGI class now uses CGI#env_table() instead of using $CGI_ENV directly.
13
+ - CGI class now uses CGI#stdinput() and CGI#stdoutput() instead of using $stdin and $stdout directly.
14
+ - Refactor 'cgialt/fcgi/core.rb'.
15
+
16
+ bugfixes:
17
+ - CGI.parse() supports to parse 'a=10&b' (no '=').
18
+ - CGI.parse() returned NoMethodError when QUERY_STRING was "&=10". Now fixed.
19
+ - CGI.unescapeHTML() couldn't convert " ". Now fixed.
20
+ - Typo fixed in CGI::Cookie.parse().
21
+ - Move RFC822_DAYS and RFC822_MONTHS from 'cgi/core.rb' to 'cgi/util.rb'.
4
22
 
5
23
 
6
24
  - release: 0.0.2
@@ -9,5 +27,6 @@
9
27
  - FastCGI supported. If you required 'cgialt/fcgi' instead of 'fcgi',
10
28
  you can use FCGI.each_cgi() method.
11
29
 
30
+
12
31
  - release: 0.0.1
13
32
  date: 2007-12-09
data/README.txt CHANGED
@@ -1,10 +1,12 @@
1
1
  = README.txt
2
2
 
3
- Release: 0.0.2
3
+ Release: 1.0.0
4
4
 
5
- copyright(c) 2007 kuwata-lab.com all rights reserved.
5
+ copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
6
6
 
7
+ http://cgialt.rubyforge.org/
7
8
  http://rubyforge.org/projects/cgialt/
9
+ http://github.com/kwatch/cgialt/
8
10
 
9
11
 
10
12
  == About
@@ -24,13 +26,11 @@ It is written in pure Ruby but works faster than 'cgi.rb'.
24
26
 
25
27
  == Install
26
28
 
27
- Download cgialt-0.0.2.tar.gz and install it according to the following:
29
+ Download cgialt-1.0.0.tar.gz and install it according to the following:
28
30
 
29
- $ tar xzf cgialt-0.0.2.tar.gz
30
- $ cd cgialt-0.0.2/
31
- $ ruby setup.rb config
32
- $ ruby setup.rb setup
33
- $ sudo ruby setup.rb install
31
+ $ tar xzf cgialt-1.0.0.tar.gz
32
+ $ cd cgialt-1.0.0/
33
+ $ sudo ruby setup.rb
34
34
 
35
35
  Or if you have installed RubyGems, you can install CGIAlt by 'gem' command.
36
36
 
@@ -54,6 +54,19 @@ instead of 'fcgi'.
54
54
  require 'cgialt'
55
55
  require 'cgialt/fcgi'
56
56
 
57
+ If you want require 'cgi' when CGIAlt is not installed, try the following.
58
+
59
+ begin
60
+ require 'cgialt'
61
+ rescue LoadError
62
+ require 'cgi'
63
+ end
64
+ begin
65
+ reqiure 'cgialt/fcgi'
66
+ rescue LoadError
67
+ require 'fcgi'
68
+ end
69
+
57
70
  If you want to replace original 'cgi.rb' entirely by 'cgialt',
58
71
  create 'cgi.rb' which requires 'cgialt' under proper directory such as
59
72
  '/usr/local/lib/ruby/site_ruby/1.8'.
@@ -65,7 +78,7 @@ When $DEBUG is true or ENV['DEBUG'] is set, CGIAlt prints release number
65
78
  to $stderr when loaded.
66
79
 
67
80
  $ DEBUG=1 ruby -e 'require "cgi"'
68
- *** CGIAlt: release 0.0.2
81
+ *** CGIAlt: release 1.0.0
69
82
 
70
83
 
71
84
  == Benchmark
data/bench.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  ##
2
- ## $Rev: 30 $
3
- ## $Release: 0.0.2 $
4
- ## copyright(c) 2007 kuwata-lab.com all rights reserved.
2
+ ## $Rev$
3
+ ## $Release: 1.0.0 $
4
+ ## copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
5
5
  ##
6
6
 
7
7
  ##
@@ -31,7 +31,7 @@
31
31
  # protocol.
32
32
 
33
33
  class CGI
34
- RELEASE = ('$Release: 0.0.2 $' =~ /[.\d]+/) && $&
34
+ RELEASE = ('$Release: 1.0.0 $' =~ /[.\d]+/) && $&
35
35
  if $DEBUG || ENV['DEBUG']
36
36
  $stderr.puts "*** CGIAlt: release #{RELEASE}"
37
37
  end
@@ -7,9 +7,9 @@
7
7
  ##
8
8
  ## Documentation: Wakou Aoyama (RDoc'd and embellished by William Webber)
9
9
  ##
10
- ## $Rev: 32 $
11
- ## $Release: 0.0.2 $
12
- ## copyright(c) 2007 kuwata-lab.com all rights reserved.
10
+ ## $Rev$
11
+ ## $Release: 1.0.0 $
12
+ ## copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
13
13
 
14
14
  class CGI
15
15
 
@@ -78,7 +78,7 @@ class CGI
78
78
  if name.is_a?(String)
79
79
  @name = name
80
80
  @value = value # value is an Array
81
- @path = rexp.match($CGI_ENV['SCRIPT_NAME']) ? $& : ''
81
+ @path = rexp.match($CGI_ENV['SCRIPT_NAME']) ? $& : '' # TODO: remove dependency on $CGI_ENV
82
82
  @secure = false
83
83
  else
84
84
  options = name
@@ -213,7 +213,9 @@ class CGI
213
213
  name, value = pairs.split('=', 2)
214
214
  next unless name && value
215
215
  name = CGI.unescape(name)
216
- values = value.split('&').collect{|v| CGI.unescape(v) }
216
+ values = value.index('&') \
217
+ ? value.split('&').collect{|v| CGI.unescape(v) } \
218
+ : [ CGI.unescape(value) ]
217
219
  if cookies.has_key?(name)
218
220
  cookies[name].value.concat(values)
219
221
  else
@@ -1,3 +1,9 @@
1
+ ##
2
+ ## $Rev$
3
+ ## $Release: 1.0.0 $
4
+ ## copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
5
+ ##
6
+
1
7
  ##
2
8
  ## Copyright (C) 2000 Network Applied Communication Laboratory, Inc.
3
9
  ##
@@ -7,9 +13,6 @@
7
13
  ##
8
14
  ## Documentation: Wakou Aoyama (RDoc'd and embellished by William Webber)
9
15
  ##
10
- ## $Rev: 32 $
11
- ## $Release: 0.0.2 $
12
- ## copyright(c) 2007 kuwata-lab.com all rights reserved.
13
16
 
14
17
  raise "Please, use ruby 1.5.4 or later." if RUBY_VERSION < "1.5.4"
15
18
 
@@ -271,7 +274,7 @@ class CGI
271
274
  #*# Standard internet newline sequence
272
275
  #*EOL = CR + LF
273
276
  #*
274
- #*REVISION = '$Id: core.rb 32 2007-12-11 04:22:35Z kwatch $' #:nodoc:
277
+ #*REVISION = '$Id: cgi.rb 12340 2007-05-22 21:58:09Z shyouhei $' #:nodoc:
275
278
  #*
276
279
  #*NEEDS_BINMODE = true if /WIN/ni.match(RUBY_PLATFORM)
277
280
  #*
@@ -301,16 +304,10 @@ class CGI
301
304
  "VARIANT_ALSO_VARIES" => "506 Variant Also Negotiates",
302
305
  }
303
306
 
304
- # Abbreviated day-of-week names specified by RFC 822
305
- RFC822_DAYS = %w[ Sun Mon Tue Wed Thu Fri Sat ]
306
-
307
- # Abbreviated month names specified by RFC 822
308
- RFC822_MONTHS = %w[ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ]
309
-
310
307
  # :startdoc:
311
308
 
312
309
  def env_table
313
- ENV
310
+ $CGI_ENV
314
311
  end
315
312
  #*** original
316
313
  #*def env_table
@@ -436,10 +433,11 @@ class CGI
436
433
 
437
434
  def _header_for_string(content_type) #:nodoc:
438
435
  buf = ''
436
+ env = env_table()
439
437
  if nph?()
440
- buf << "#{$CGI_ENV['SERVER_PROTOCOL'] || 'HTTP/1.0'} 200 OK#{EOL}"
438
+ buf << "#{env['SERVER_PROTOCOL'] || 'HTTP/1.0'} 200 OK#{EOL}"
441
439
  buf << "Date: #{CGI.rfc1123_date(Time.now)}#{EOL}"
442
- buf << "Server: #{$CGI_ENV['SERVER_SOFTWARE']}#{EOL}"
440
+ buf << "Server: #{env['SERVER_SOFTWARE']}#{EOL}"
443
441
  buf << "Connection: close#{EOL}"
444
442
  end
445
443
  buf << "Content-Type: #{content_type}#{EOL}"
@@ -452,6 +450,7 @@ class CGI
452
450
 
453
451
  def _header_for_hash(options) #:nodoc:
454
452
  buf = ''
453
+ env = env_table()
455
454
  ## add charset to option['type']
456
455
  options['type'] ||= 'text/html'
457
456
  charset = options.delete('charset')
@@ -459,12 +458,12 @@ class CGI
459
458
  ## NPH
460
459
  options.delete('nph') if defined?(MOD_RUBY)
461
460
  if options.delete('nph') || nph?()
462
- protocol = $CGI_ENV['SERVER_PROTOCOL'] || 'HTTP/1.0'
461
+ protocol = env['SERVER_PROTOCOL'] || 'HTTP/1.0'
463
462
  status = options.delete('status')
464
463
  status = HTTP_STATUS[status] || status || '200 OK'
465
464
  buf << "#{protocol} #{status}#{EOL}"
466
465
  buf << "Date: #{CGI.rfc1123_date(Time.now)}#{EOL}"
467
- options['server'] ||= $CGI_ENV['SERVER_SOFTWARE'] || ''
466
+ options['server'] ||= env['SERVER_SOFTWARE'] || ''
468
467
  options['connection'] ||= 'close'
469
468
  end
470
469
  ## common headers
@@ -507,7 +506,8 @@ class CGI
507
506
  private :_header_for_hash
508
507
 
509
508
  def nph? #:nodoc:
510
- return /IIS\/(\d+)/n.match($CGI_ENV['SERVER_SOFTWARE']) && $1.to_i < 5
509
+ env = env_table()
510
+ return /IIS\/(\d+)/n.match(env['SERVER_SOFTWARE']) && $1.to_i < 5
511
511
  end
512
512
 
513
513
  def _header_for_modruby(buf) #:nodoc:
@@ -703,7 +703,8 @@ class CGI
703
703
  # to "ja".
704
704
  def out(options='text/html') # :yield:
705
705
  options = { 'type' => options } if options.kind_of?(String)
706
- stdout = $stdout
706
+ stdout = stdoutput()
707
+ env = env_table()
707
708
  stdout.binmode if defined? stdout.binmode
708
709
  #if ENV['REQUEST_METHOD'] == 'HEAD'
709
710
  # charset = options['charset']
@@ -713,9 +714,9 @@ class CGI
713
714
  #end
714
715
  content = yield
715
716
  content = convert_content(content, options)
716
- options['length'] = content.length.to_s
717
+ options['length'] = _strlen(content).to_s
717
718
  stdout.print header(options)
718
- stdout.print content unless $CGI_ENV['REQUEST_METHOD'] == 'HEAD'
719
+ stdout.print content unless env['REQUEST_METHOD'] == 'HEAD'
719
720
  end
720
721
  def convert_content(content, options) #:nodoc:
721
722
  charset = options['charset']
@@ -734,6 +735,16 @@ class CGI
734
735
  return content
735
736
  end
736
737
  private :convert_content
738
+ if "".respond_to?(:bytesize)
739
+ def _strlen(str)
740
+ str.bytesize
741
+ end
742
+ else
743
+ def _strlen(str)
744
+ str.length
745
+ end
746
+ end
747
+ private :_strlen
737
748
  #*** original
738
749
  #*def out(options = "text/html") # :yield:
739
750
  #*
@@ -769,7 +780,7 @@ class CGI
769
780
  # cgi = CGI.new
770
781
  # cgi.print # default: cgi.print == $DEFAULT_OUTPUT.print
771
782
  def print(*options)
772
- $stdout.print(*options)
783
+ stdoutput().print(*options)
773
784
  #*** original
774
785
  #*stdoutput.print(*options)
775
786
  #*** /original
@@ -785,8 +796,10 @@ class CGI
785
796
  def CGI::parse(query)
786
797
  params = {}
787
798
  query.split(/[&;]/n).each do |pair|
788
- key, value = pair.split('=', 2)
789
- (params[CGI.unescape(key)] ||= []) << CGI.unescape(value)
799
+ key, value = pair.split('=', 2) # value is nil when '=' not found
800
+ #(params[CGI.unescape(key || '')] ||= []) << CGI.unescape(value || '') # desirable
801
+ key = CGI.unescape(key) if key
802
+ (params[key] ||= []) << (value ? CGI.unescape(value) : value)
790
803
  end
791
804
  params.default = [].freeze
792
805
  return params
@@ -836,88 +849,88 @@ class CGI
836
849
  module QueryExtension
837
850
 
838
851
  ## return Integer(ENV['CONTENT_LENGTH'])
839
- def content_length ; return Integer($CGI_ENV['CONTENT_LENGTH']) ; end
852
+ def content_length ; return Integer(env_table['CONTENT_LENGTH']) ; end
840
853
 
841
854
  ## return Integer(ENV['SERVER_PORT'])
842
- def server_port ; return Integer($CGI_ENV['SERVER_PORT']) ; end
855
+ def server_port ; return Integer(env_table['SERVER_PORT']) ; end
843
856
 
844
857
  ## return ENV['AUTH_TYPE']
845
- def auth_type ; return $CGI_ENV['AUTH_TYPE'] ; end
858
+ def auth_type ; return env_table['AUTH_TYPE'] ; end
846
859
 
847
860
  ## return ENV['CONTENT_TYPE']
848
- def content_type ; return $CGI_ENV['CONTENT_TYPE'] ; end
861
+ def content_type ; return env_table['CONTENT_TYPE'] ; end
849
862
 
850
863
  ## return ENV['GATEWAY_INTERFACE']
851
- def gateway_interface ; return $CGI_ENV['GATEWAY_INTERFACE'] ; end
864
+ def gateway_interface ; return env_table['GATEWAY_INTERFACE'] ; end
852
865
 
853
866
  ## return ENV['PATH_INFO']
854
- def path_info ; return $CGI_ENV['PATH_INFO'] ; end
867
+ def path_info ; return env_table['PATH_INFO'] ; end
855
868
 
856
869
  ## return ENV['PATH_TRANSLATED']
857
- def path_translated ; return $CGI_ENV['PATH_TRANSLATED'] ; end
870
+ def path_translated ; return env_table['PATH_TRANSLATED'] ; end
858
871
 
859
872
  ## return ENV['QUERY_STRING']
860
- def query_string ; return $CGI_ENV['QUERY_STRING'] ; end
873
+ def query_string ; return env_table['QUERY_STRING'] ; end
861
874
 
862
875
  ## return ENV['REMOTE_ADDR']
863
- def remote_addr ; return $CGI_ENV['REMOTE_ADDR'] ; end
876
+ def remote_addr ; return env_table['REMOTE_ADDR'] ; end
864
877
 
865
878
  ## return ENV['REMOTE_HOST']
866
- def remote_host ; return $CGI_ENV['REMOTE_HOST'] ; end
879
+ def remote_host ; return env_table['REMOTE_HOST'] ; end
867
880
 
868
881
  ## return ENV['REMOTE_IDENT']
869
- def remote_ident ; return $CGI_ENV['REMOTE_IDENT'] ; end
882
+ def remote_ident ; return env_table['REMOTE_IDENT'] ; end
870
883
 
871
884
  ## return ENV['REMOTE_USER']
872
- def remote_user ; return $CGI_ENV['REMOTE_USER'] ; end
885
+ def remote_user ; return env_table['REMOTE_USER'] ; end
873
886
 
874
887
  ## return ENV['REQUEST_METHOD']
875
- def request_method ; return $CGI_ENV['REQUEST_METHOD'] ; end
888
+ def request_method ; return env_table['REQUEST_METHOD'] ; end
876
889
 
877
890
  ## return ENV['SCRIPT_NAME']
878
- def script_name ; return $CGI_ENV['SCRIPT_NAME'] ; end
891
+ def script_name ; return env_table['SCRIPT_NAME'] ; end
879
892
 
880
893
  ## return ENV['SERVER_NAME']
881
- def server_name ; return $CGI_ENV['SERVER_NAME'] ; end
894
+ def server_name ; return env_table['SERVER_NAME'] ; end
882
895
 
883
896
  ## return ENV['SERVER_PROTOCOL']
884
- def server_protocol ; return $CGI_ENV['SERVER_PROTOCOL'] ; end
897
+ def server_protocol ; return env_table['SERVER_PROTOCOL'] ; end
885
898
 
886
899
  ## return ENV['SERVER_SOFTWARE']
887
- def server_software ; return $CGI_ENV['SERVER_SOFTWARE'] ; end
900
+ def server_software ; return env_table['SERVER_SOFTWARE'] ; end
888
901
 
889
902
  ## return ENV['HTTP_ACCEPT']
890
- def accept ; return $CGI_ENV['HTTP_ACCEPT'] ; end
903
+ def accept ; return env_table['HTTP_ACCEPT'] ; end
891
904
 
892
905
  ## return ENV['HTTP_ACCEPT_CHARSET']
893
- def accept_charset ; return $CGI_ENV['HTTP_ACCEPT_CHARSET'] ; end
906
+ def accept_charset ; return env_table['HTTP_ACCEPT_CHARSET'] ; end
894
907
 
895
908
  ## return ENV['HTTP_ACCEPT_ENCODING']
896
- def accept_encoding ; return $CGI_ENV['HTTP_ACCEPT_ENCODING'] ; end
909
+ def accept_encoding ; return env_table['HTTP_ACCEPT_ENCODING'] ; end
897
910
 
898
911
  ## return ENV['HTTP_ACCEPT_LANGUAGE']
899
- def accept_language ; return $CGI_ENV['HTTP_ACCEPT_LANGUAGE'] ; end
912
+ def accept_language ; return env_table['HTTP_ACCEPT_LANGUAGE'] ; end
900
913
 
901
914
  ## return ENV['HTTP_CACHE_CONTROL']
902
- def cache_control ; return $CGI_ENV['HTTP_CACHE_CONTROL'] ; end
915
+ def cache_control ; return env_table['HTTP_CACHE_CONTROL'] ; end
903
916
 
904
917
  ## return ENV['HTTP_FROM']
905
- def from ; return $CGI_ENV['HTTP_FROM'] ; end
918
+ def from ; return env_table['HTTP_FROM'] ; end
906
919
 
907
920
  ## return ENV['HTTP_HOST']
908
- def host ; return $CGI_ENV['HTTP_HOST'] ; end
921
+ def host ; return env_table['HTTP_HOST'] ; end
909
922
 
910
923
  ## return ENV['HTTP_NEGOTIATE']
911
- def negotiate ; return $CGI_ENV['HTTP_NEGOTIATE'] ; end
924
+ def negotiate ; return env_table['HTTP_NEGOTIATE'] ; end
912
925
 
913
926
  ## return ENV['HTTP_PRAGMA']
914
- def pragma ; return $CGI_ENV['HTTP_PRAGMA'] ; end
927
+ def pragma ; return env_table['HTTP_PRAGMA'] ; end
915
928
 
916
929
  ## return ENV['HTTP_REFERER']
917
- def referer ; return $CGI_ENV['HTTP_REFERER'] ; end
930
+ def referer ; return env_table['HTTP_REFERER'] ; end
918
931
 
919
932
  ## return ENV['HTTP_USER_AGENT']
920
- def user_agent ; return $CGI_ENV['HTTP_USER_AGENT'] ; end
933
+ def user_agent ; return env_table['HTTP_USER_AGENT'] ; end
921
934
 
922
935
  #*** orignal
923
936
  #*%w[ CONTENT_LENGTH SERVER_PORT ].each do |env|
@@ -942,7 +955,7 @@ class CGI
942
955
 
943
956
  # Get the raw cookies as a string.
944
957
  def raw_cookie
945
- return $CGI_ENV['HTTP_COOKIE']
958
+ return env_table['HTTP_COOKIE']
946
959
  end
947
960
  #*** original
948
961
  #*def raw_cookie
@@ -952,7 +965,7 @@ class CGI
952
965
 
953
966
  # Get the raw RFC2965 cookies as a string.
954
967
  def raw_cookie2
955
- return $CGI_ENV['HTTP_COOKIE2']
968
+ return env_table['HTTP_COOKIE2']
956
969
  end
957
970
  #*** original
958
971
  #*def raw_cookie2
@@ -981,7 +994,7 @@ class CGI
981
994
 
982
995
  def read_multipart(boundary, content_length)
983
996
  ## read first boundary
984
- stdin = $stdin
997
+ stdin = stdinput()
985
998
  stdin.binmode if defined? stdin.binmode
986
999
  first_line = "--#{boundary}#{EOL}"
987
1000
  content_length -= first_line.length
@@ -990,20 +1003,25 @@ class CGI
990
1003
  raise EOFError.new("bad content body") unless first_line == status
991
1004
  ## parse and set params
992
1005
  params = {}
993
- boundary_rexp = /--#{Regexp.quote(boundary, 'n')}(#{EOL}|--)/n
1006
+ begin
1007
+ quoted = Regexp.quote(boundary, 'n')
1008
+ rescue ArgumentError
1009
+ quoted = Regexp.quote(boundary) # Ruby1.9
1010
+ end
1011
+ boundary_rexp = /--#{quoted}(#{EOL}|--)/n
994
1012
  boundary_size = "#{EOL}--#{boundary}#{EOL}".length
995
1013
  boundary_end = nil
996
1014
  buf = ''
997
1015
  bufsize = 10 * 1024
998
- max_count = MAX_MULTIPART_COUNT
999
- n = 0
1016
+ count = MAX_MULTIPART_COUNT
1000
1017
  while true
1001
- (n += 1) < max_count or raise StandardError.new("too many parameters.")
1018
+ (count -= 1) >= 0 or raise StandardError.new("too many parameters.")
1002
1019
  ## create body (StringIO or Tempfile)
1003
1020
  body = create_body(bufsize < content_length)
1004
1021
  class << body
1005
1022
  alias local_path path
1006
- attr_reader :original_filename, :content_type
1023
+ #attr_reader :original_filename, :content_type
1024
+ attr_accessor :original_filename, :content_type # for Ruby1.9
1007
1025
  end
1008
1026
  ## find head and boundary
1009
1027
  head = nil
@@ -1042,11 +1060,13 @@ class CGI
1042
1060
  /Content-Disposition:.* filename=(?:"(.*?)"|([^;\r\n]*))/ni.match(head)
1043
1061
  filename = $1 || $2 || ''
1044
1062
  filename = CGI.unescape(filename) if unescape_filename?()
1045
- body.instance_variable_set('@original_filename', filename.taint)
1063
+ #body.instance_variable_set('@original_filename', filename.taint)
1064
+ body.original_filename = filename.taint # for Ruby1.9
1046
1065
  ## content type
1047
1066
  /Content-Type: (.*)/ni.match(head)
1048
1067
  (content_type = $1 || '').chomp!
1049
- body.instance_variable_set('@content_type', content_type.taint)
1068
+ #body.instance_variable_set('@content_type', content_type.taint)
1069
+ body.content_type = content_type.taint # for Ruby1.9
1050
1070
  ## query parameter name
1051
1071
  /Content-Disposition:.* name=(?:"(.*?)"|([^;\r\n]*))/ni.match(head)
1052
1072
  name = $1 || $2 || ''
@@ -1077,7 +1097,7 @@ class CGI
1077
1097
  return body
1078
1098
  end
1079
1099
  def unescape_filename? #:nodoc:
1080
- user_agent = $CGI_ENV['HTTP_USER_AGENT']
1100
+ user_agent = env_table['HTTP_USER_AGENT']
1081
1101
  return /Mac/ni.match(user_agent) && /Mozilla/ni.match(user_agent) && !/MSIE/ni.match(user_agent)
1082
1102
  end
1083
1103
  #*** original
@@ -1195,7 +1215,7 @@ class CGI
1195
1215
  if ARGV.empty?
1196
1216
  string = ARGV.join(' ')
1197
1217
  else
1198
- $stdin.tty? and $stderr.puts "(offline mode: enter name=value pairs on standard input)"
1218
+ STDIN.tty? and $stderr.puts "(offline mode: enter name=value pairs on standard input)"
1199
1219
  string = readlines().join(' ').gsub(/\n/n, '')
1200
1220
  end
1201
1221
  string = string.gsub(/\\=/n, '%3D').gsub(/\\&/n, '%26')
@@ -1235,16 +1255,17 @@ class CGI
1235
1255
  # Handles multipart forms (in particular, forms that involve file uploads).
1236
1256
  # Reads query parameters in the @params field, and cookies into @cookies.
1237
1257
  def initialize_query()
1238
- case $CGI_ENV['REQUEST_METHOD']
1258
+ env = env_table()
1259
+ case env_table()['REQUEST_METHOD']
1239
1260
  when 'GET', 'HEAD'
1240
- query_str = defined?(MOD_RUBY) ? Apache::request.args : $CGI_ENV['QUERY_STRING']
1261
+ query_str = defined?(MOD_RUBY) ? Apache::request.args : env['QUERY_STRING']
1241
1262
  @params = CGI.parse(query_str || '')
1242
1263
  @multipart = false
1243
1264
  when 'POST'
1244
- content_length = Integer($CGI_ENV['CONTENT_LENGTH'])
1245
- if /\Amultipart\/form-data/.match($CGI_ENV['CONTENT_TYPE'])
1265
+ content_length = Integer(env['CONTENT_LENGTH'])
1266
+ if /\Amultipart\/form-data/.match(env['CONTENT_TYPE'])
1246
1267
  raise StandardError.new("too large multipart data.") if content_length > MAX_MULTIPART_LENGTH
1247
- unless /boundary=(?:"([^";,]+?)"|([^;,\s]+))/.match($CGI_ENV['CONTENT_TYPE'])
1268
+ unless /boundary=(?:"([^";,]+?)"|([^;,\s]+))/.match(env['CONTENT_TYPE'])
1248
1269
  raise StandardError.new("no boundary of multipart data.")
1249
1270
  end
1250
1271
  boundary = $1 || $2
@@ -1252,7 +1273,7 @@ class CGI
1252
1273
  @multipart = true
1253
1274
  else
1254
1275
  raise StandardError.new("too large post data.") if content_length > MAX_CONTENT_LENGTH
1255
- stdin = $stdin
1276
+ stdin = stdinput()
1256
1277
  stdin.binmode if defined? stdin.binmode
1257
1278
  query_str = stdin.read(content_length)
1258
1279
  @params = CGI.parse(query_str || '')
@@ -1262,7 +1283,7 @@ class CGI
1262
1283
  @params = Hash.new([].freeze)
1263
1284
  @multipart = false
1264
1285
  end
1265
- @cookies = CGI::Cookie.parse($CGI_ENV['HTTP_COOKIE'] || $CGI_ENV['COOKIE'])
1286
+ @cookies = CGI::Cookie.parse(env['HTTP_COOKIE'] || env['COOKIE'])
1266
1287
  nil
1267
1288
  end
1268
1289
  private :initialize_query
@@ -1396,7 +1417,8 @@ class CGI
1396
1417
  # cookies and other parameters are parsed automatically from the standard
1397
1418
  # CGI locations, which varies according to the REQUEST_METHOD.
1398
1419
  def initialize(type=nil)
1399
- if defined?(MOD_RUBY) && !$CGI_ENV['GATEWAY_INTERFACE']
1420
+ env = env_table()
1421
+ if defined?(MOD_RUBY) && !env['GATEWAY_INTERFACE']
1400
1422
  Apache.request.setup_cgi_env
1401
1423
  end
1402
1424
  ##