Skip to content

Commit 037804d

Browse files
committed
fix the Flash middleware loading the session on every request (very dangerous especially with Rack::Cache), it should only be loaded when the flash method is called
1 parent 1b4e6ca commit 037804d

File tree

2 files changed

+3
-7
lines changed

2 files changed

+3
-7
lines changed

actionpack/lib/action_controller/test_case.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,6 @@ def process(action, parameters = nil, session = nil, flash = nil, http_method =
454454

455455
@request.session = ActionController::TestSession.new(session) if session
456456
@request.session["flash"] = @request.flash.update(flash || {})
457-
@request.session["flash"].sweep
458457

459458
@controller.request = @request
460459
@controller.params.merge!(parameters)

actionpack/lib/action_dispatch/middleware/flash.rb

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ class Request
44
# read a notice you put there or <tt>flash["notice"] = "hello"</tt>
55
# to put a new one.
66
def flash
7-
@env[Flash::KEY] ||= (session["flash"] || Flash::FlashHash.new)
7+
@env[Flash::KEY] ||= (session["flash"] || Flash::FlashHash.new).tap(&:sweep)
88
end
99
end
1010

@@ -235,10 +235,6 @@ def initialize(app)
235235
end
236236

237237
def call(env)
238-
if (session = env['rack.session']) && (flash = session['flash'])
239-
flash.sweep
240-
end
241-
242238
@app.call(env)
243239
ensure
244240
session = env['rack.session'] || {}
@@ -255,7 +251,8 @@ def call(env)
255251
env[KEY] = new_hash
256252
end
257253

258-
if session.key?('flash') && session['flash'].empty?
254+
if (!session.respond_to?(:loaded?) || session.loaded?) && # (reset_session uses {}, which doesn't implement #loaded?)
255+
session.key?('flash') && session['flash'].empty?
259256
session.delete('flash')
260257
end
261258
end

0 commit comments

Comments
 (0)