Bug #1314
closedCGI doesnt properly handle empty arguments
Description
=begin
In case you are trying to initialise with CGI.new, on non-interactive terminal, Ruby fails with:
/usr/lib64/ruby/1.8/cgi.rb:1092:in readlines': Invalid argument (Errno::EINVAL) from /usr/lib64/ruby/1.8/cgi.rb:1092:in
read_from_cmdline'
from /usr/lib64/ruby/1.8/cgi.rb:1129:in initialize_query' from /usr/lib64/ruby/1.8/cgi.rb:2281:in
initialize'
I fixed it by modifying read_from_cmdline a bit:
# offline mode. read name=value pairs on standard input.
def read_from_cmdline
require "shellwords"
string = unless ARGV.empty?
ARGV.join(' ')
else
if STDIN.tty?
STDERR.print(
%|(offline mode: enter name=value pairs on standard input)\n|
)
end
array = nil
begin
readlines
rescue
end
if not array.nil?
array.join(' ').gsub(/\n/n, '')
else
""
end
end.gsub(/\\=/n, '%3D').gsub(/\\&/n, '%26')
words = Shellwords.shellwords(string)
if words.find{|x| /=/n.match(x) }
words.join('&')
else
words.join('+')
end
end
Sorry that it isnt patch, I just edited cgi.rb found from my system...
=end
Updated by naruse (Yui NARUSE) over 14 years ago
- Assignee set to xibbar (Takeyuki FUJIOKA)
=begin
=end
Updated by xibbar (Takeyuki FUJIOKA) over 14 years ago
- Status changed from Open to Assigned
- Assignee changed from xibbar (Takeyuki FUJIOKA) to knu (Akinori MUSHA)
=begin
I commited for trunk of this update.
Please choice backport or reject for ruby-1.8 branch
and change status.
May I commit this update ?
=end
Updated by knu (Akinori MUSHA) over 14 years ago
- Assignee changed from knu (Akinori MUSHA) to xibbar (Takeyuki FUJIOKA)
=begin
Seems to me the change made on trunk is wrong because the result of "readlines" is never assigned to "array".
I think you can replace the following lines:
array = nil
begin
...
end
with just one line:
array = readlines rescue nil
You can backport a fix to ruby_1_8 after the problem is properly fixed on trunk.
Thanks!
=end
Updated by xibbar (Takeyuki FUJIOKA) over 14 years ago
- Status changed from Assigned to Closed
=begin
=end