Project

General

Profile

Backport #229

CGI::Cookies can "get out of sync"

Added by NoKarma (Arthur Schreiber) over 11 years ago. Updated almost 9 years ago.

Status:
Closed
Priority:
Normal
[ruby-core:17634]

Description

=begin
CGI::Cookies are an instance of a DelegateClass of their @value instance variable,
which is always an Array. But changing a Cookie's value using the #value= instance
method of CGI::Cookie causes the Cookie to "get out of sync":

require "cgi"

cookie = CGI::Cookie.new("my-cookie", "first value", "second value")
cookie.value # => ["first value", "second value"]

cookie[0] # => "first value"
cookie[1] # => "second value"
cookie[2] = "new value"

cookie.each do |val|
val # => "first value", "second value", "new value"
end

cookie.inspect # => "[\"first value\", \"second value\", \"new value\"]"
cookie.to_s # => "my-cookie=first+value&second+value&new+value; path="

cookie = CGI::Cookie.new("my-cookie", "first value", "second value")
cookie.value # => ["first value", "second value"]

# This makes the cookie get out of sync
cookie.value = [ "test" ]

cookie[0] # => "first value"
cookie[1] # => "second value"
cookie[2] = "new value"

cookie.each do |val|
val # => "first value", "second value", "new value"
end

cookie.inspect # => "[\"first value\", \"second value\", \"new value\"]"
cookie.to_s # => "my-cookie=test; path="

The attached patch fixes this issue.
=end


Files

cgi_cookie.patch (1005 Bytes) cgi_cookie.patch NoKarma (Arthur Schreiber), 07/07/2008 07:37 AM

Related issues

Related to Ruby master - Feature #502: CGI::CookieをdelegateからArrayの継承へ変更Closed08/27/2008Actions
#1

Updated by shyouhei (Shyouhei Urabe) about 11 years ago

  • Assignee set to xibbar (Takeyuki FUJIOKA)

=begin

=end

#2

Updated by marcandre (Marc-Andre Lafortune) over 10 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
Applied in changeset r24913.
=end

#3

Updated by marcandre (Marc-Andre Lafortune) over 10 years ago

=begin
Notes: the problem was even more acute in Ruby 1.9, since Cookie is no longer a Delegate (ref: issue #502), e.g. cookie.value.unshift("something"). Rubyspecs have been updated for this kind of check.

Patch was applied as is in Ruby 1.8 and modified for Ruby 1.9 to account for the fact that Cookie is an Array.
=end

#4

Updated by shyouhei (Shyouhei Urabe) over 10 years ago

  • Status changed from Closed to Assigned
  • Assignee changed from xibbar (Takeyuki FUJIOKA) to wyhaines (Kirk Haines)

=begin
1.8.6 also has this issue.
=end

#5

Updated by wyhaines (Kirk Haines) almost 10 years ago

  • Status changed from Assigned to Closed

=begin
This issue was solved with changeset r27932.
Arthur, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

=end

Also available in: Atom PDF