Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 3039

Show
Ignore:
Timestamp:
11/15/05 07:51:09 (3 years ago)
Author:
bitsweat
Message:

Handle cookie parsing irregularity for certain Nokia phones. Closes #2530.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/actionpack/CHANGELOG

    r3036 r3039  
    11*SVN* 
     2 
     3* Handle cookie parsing irregularity for certain Nokia phones.  #2530 [zaitzow@gmail.com] 
    24 
    35* Added PrototypeHelper::JavaScriptGenerator and PrototypeHelper#update_page for easily modifying multiple elements in an Ajax response. [Sam Stephenson]  Example: 
  • trunk/actionpack/lib/action_controller/cgi_ext/cookie_performance_fix.rb

    r2245 r3039  
    109109 
    110110      if raw_cookie 
    111         raw_cookie.split(/; /).each do |pairs| 
     111        raw_cookie.split(/; ?/).each do |pairs| 
    112112          name, values = pairs.split('=',2) 
    113113          next unless name and values 
  • trunk/actionpack/test/controller/cgi_test.rb

    r2596 r3039  
    314314  def setup 
    315315    @request_hash = {"HTTP_MAX_FORWARDS"=>"10", "SERVER_NAME"=>"glu.ttono.us:8007", "FCGI_ROLE"=>"RESPONDER", "HTTP_X_FORWARDED_HOST"=>"glu.ttono.us", "HTTP_ACCEPT_ENCODING"=>"gzip, deflate", "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/312.5.1 (KHTML, like Gecko) Safari/312.3.1", "PATH_INFO"=>"", "HTTP_ACCEPT_LANGUAGE"=>"en", "HTTP_HOST"=>"glu.ttono.us:8007", "SERVER_PROTOCOL"=>"HTTP/1.1", "REDIRECT_URI"=>"/dispatch.fcgi", "SCRIPT_NAME"=>"/dispatch.fcgi", "SERVER_ADDR"=>"207.7.108.53", "REMOTE_ADDR"=>"207.7.108.53", "SERVER_SOFTWARE"=>"lighttpd/1.4.5", "HTTP_COOKIE"=>"_session_id=c84ace84796670c052c6ceb2451fb0f2; is_admin=yes", "HTTP_X_FORWARDED_SERVER"=>"glu.ttono.us", "REQUEST_URI"=>"/admin", "DOCUMENT_ROOT"=>"/home/kevinc/sites/typo/public", "SERVER_PORT"=>"8007", "QUERY_STRING"=>"", "REMOTE_PORT"=>"63137", "GATEWAY_INTERFACE"=>"CGI/1.1", "HTTP_X_FORWARDED_FOR"=>"65.88.180.234", "HTTP_ACCEPT"=>"*/*", "SCRIPT_FILENAME"=>"/home/kevinc/sites/typo/public/dispatch.fcgi", "REDIRECT_STATUS"=>"200", "REQUEST_METHOD"=>"GET"} 
     316    # cookie as returned by some Nokia phone browsers (no space after semicolon separator) 
     317    @alt_cookie_fmt_request_hash = {"HTTP_COOKIE"=>"_session_id=c84ace84796670c052c6ceb2451fb0f2;is_admin=yes"} 
    316318    @fake_cgi = Struct.new(:env_table).new(@request_hash) 
    317319    @request = ActionController::CgiRequest.new(@fake_cgi) 
     
    328330  end 
    329331   
     332  def test_cookie_syntax_resilience 
     333    cookies = CGI::Cookie::parse(@request_hash["HTTP_COOKIE"]); 
     334    assert_equal ["c84ace84796670c052c6ceb2451fb0f2"], cookies["_session_id"] 
     335    assert_equal ["yes"], cookies["is_admin"] 
     336     
     337    alt_cookies = CGI::Cookie::parse(@alt_cookie_fmt_request_hash["HTTP_COOKIE"]); 
     338    assert_equal ["c84ace84796670c052c6ceb2451fb0f2"], alt_cookies["_session_id"] 
     339    assert_equal ["yes"], alt_cookies["is_admin"] 
     340  end 
     341   
    330342end