diff options
author | wyhaines <wyhaines@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-05-20 19:14:58 +0000 |
---|---|---|
committer | wyhaines <wyhaines@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-05-20 19:14:58 +0000 |
commit | 5ada603a7e2aa906f8e200c29e6ab0c10c0e66cc (patch) | |
tree | 09dd1edc3f506bddf6f598cf7254fabe316313ec /lib | |
parent | c11eabf5c47a548f0c38b42912207435e812aa7f (diff) |
lib/cgi.rb: Backport #229 [ruby-core:17634]; CGI::Cookie objects 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
Diffstat (limited to 'lib')
-rw-r--r-- | lib/cgi.rb | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/lib/cgi.rb b/lib/cgi.rb index 15e71a3b65..bc9335bb11 100644 --- a/lib/cgi.rb +++ b/lib/cgi.rb @@ -817,8 +817,8 @@ class CGI 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. # @@ -828,16 +828,17 @@ class CGI @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 |