Skip to content

Commit

Permalink
lib/cgi.rb: Backport ruby#229 [ruby-core:17634]; CGI::Cookie objects …
Browse files Browse the repository at this point in the history
…can get out of sync when CGI::Cookie#value= is used to assign a new value. Also, if a nil value ends up in the array of values for the cookie, CGI::Cookie#to_s would blow up on a gsub error when it tried to CGI::escape the nil value. This is fixed so that nils are treated as empty strings.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_6@27932 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
wyhaines committed May 20, 2010
1 parent c11eabf commit 5ada603
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions lib/cgi.rb
Original file line number Diff line number Diff line change
Expand Up @@ -817,8 +817,8 @@ def initialize(name = "", *value)
super(@value)
end

attr_accessor("name", "value", "path", "domain", "expires")
attr_reader("secure")
attr_accessor("name", "path", "domain", "expires")
attr_reader("secure", "value")

# Set whether the Cookie is a secure cookie or not.
#
Expand All @@ -828,16 +828,17 @@ def secure=(val)
@secure
end

# Set the value of the cookie.
def value=(val)
@value.replace(Array(val))
end

# Convert the Cookie to its string representation.
def to_s
buf = ""
buf += @name + '='

if @value.kind_of?(String)
buf += CGI::escape(@value)
else
buf += @value.collect{|v| CGI::escape(v) }.join("&")
end
buf += @value.map { |v| CGI::escape(v.to_s) }.join("&")

if @domain
buf += '; domain=' + @domain
Expand Down

0 comments on commit 5ada603

Please sign in to comment.