cgialt 0.0.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
  ##