Project

General

Profile

Actions

Bug #1314

closed

CGI doesn૑t properly handle empty arguments

Added by Smar (Samu Voutilainen) about 15 years ago. Updated almost 13 years ago.

Status:
Closed
ruby -v:
ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]

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 isn૑t patch, I just edited cgi.rb found from my system...
=end

Actions #1

Updated by naruse (Yui NARUSE) over 14 years ago

  • Assignee set to xibbar (Takeyuki FUJIOKA)

=begin

=end

Actions #2

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

Actions #3

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

Actions #4

Updated by xibbar (Takeyuki FUJIOKA) over 14 years ago

  • Status changed from Assigned to Closed

=begin

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0