mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
*** empty log message ***
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/RUBY@11 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
f12baed5df
commit
fd1d8cdc09
78 changed files with 7894 additions and 7806 deletions
|
@ -9,29 +9,59 @@
|
|||
# foo.keys <== array of fields
|
||||
# foo.inputs <== hash of { <field> => <value> }
|
||||
|
||||
class CGI
|
||||
attr("inputs")
|
||||
|
||||
def initialize
|
||||
str = if ENV['REQUEST_METHOD'] == "GET"
|
||||
ENV['QUERY_STRING']
|
||||
elsif ENV['REQUEST_METHOD'] == "POST"
|
||||
$stdin.read ENV['CONTENT_LENGTH'].to_i
|
||||
else
|
||||
""
|
||||
end
|
||||
arr = str.split(/&/)
|
||||
@inputs = {}
|
||||
arr.each do |x|
|
||||
x.gsub!(/\+/, ' ')
|
||||
key, val = x.split(/=/, 2)
|
||||
val = "" unless val
|
||||
|
||||
key.gsub!(/%(..)/) { [$1.hex].pack("c") }
|
||||
val.gsub!(/%(..)/) { [$1.hex].pack("c") }
|
||||
# if running on Windows(IIS or PWS) then change cwd.
|
||||
if ENV['SERVER_SOFTWARE'] =~ /^Microsoft-/ then
|
||||
Dir.chdir ENV['PATH_TRANSLATED'].sub(/[^\\]+$/, '')
|
||||
end
|
||||
|
||||
@inputs[key] += "\0" if @inputs[key]
|
||||
@inputs[key] += val
|
||||
require "shellwords.rb"
|
||||
|
||||
class CGI
|
||||
include Shellwords
|
||||
|
||||
attr("inputs")
|
||||
|
||||
# original is CGI.pm
|
||||
def read_from_cmdline
|
||||
words = shellwords(if not ARGV.empty? then
|
||||
ARGV.join(' ')
|
||||
else
|
||||
print "(offline mode: enter name=value pairs on standard input)\n"
|
||||
readlines.join(' ').gsub(/\n/, '')
|
||||
end.gsub(/\\=/, '%3D').gsub(/\\&/, '%26'))
|
||||
|
||||
if words.find{|x| x =~ /=/} then words.join('&') else words.join('+') end
|
||||
end
|
||||
|
||||
# escape url encode
|
||||
def escape(str)
|
||||
str.gsub!(/[^a-zA-Z0-9_\-.]/n){ sprintf("%%%02X", $&.unpack("C")[0]) }
|
||||
str
|
||||
end
|
||||
|
||||
# unescape url encoded
|
||||
def unescape(str)
|
||||
str.gsub! /\+/, ' '
|
||||
str.gsub!(/%([0-9a-fA-F]{2})/){ [$1.hex].pack("c") }
|
||||
str
|
||||
end
|
||||
module_function :escape, :unescape
|
||||
|
||||
def initialize
|
||||
# exception messages should be printed to stdout.
|
||||
STDERR.reopen(STDOUT)
|
||||
|
||||
@inputs = {}
|
||||
case ENV['REQUEST_METHOD']
|
||||
when "GET"
|
||||
ENV['QUERY_STRING'] or ""
|
||||
when "POST"
|
||||
$stdin.read ENV['CONTENT_LENGTH'].to_i
|
||||
else
|
||||
read_from_cmdline
|
||||
end.split(/&/).each do |x|
|
||||
key, val = x.split(/=/,2).collect{|x|unescape(x)}
|
||||
@inputs[key] += ("\0" if @inputs[key]) + (val or "")
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -53,4 +83,15 @@ class CGI
|
|||
TRUE
|
||||
end
|
||||
|
||||
def CGI.error
|
||||
m = $!.dup
|
||||
m.gsub!(/&/, '&')
|
||||
m.gsub!(/</, '<')
|
||||
m.gsub!(/>/, '>')
|
||||
msgs = ["<pre>ERROR: <strong>#{m}</strong>"]
|
||||
msgs << $@
|
||||
msgs << "</pre>"
|
||||
CGI.message(msgs.join("\n"), "ERROR")
|
||||
exit
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue