discourse/app/services/user_notification_renderer.rb
Sam Saffron 5aaf7e3316 FIX: during concurrent emails generation renderer should not be reused
Our instance used for template rendering needs a lock to ensure there is
no race condition where rendering happens on 2 threads at the same time.

This can lead to local poisoning which can cause unexpected results in
emails
2019-10-10 08:50:48 +11:00

20 lines
401 B
Ruby

# frozen_string_literal: true
class UserNotificationRenderer < ActionView::Base
include ApplicationHelper
include UserNotificationsHelper
include EmailHelper
LOCK = Mutex.new
def self.render(*args)
LOCK.synchronize do
@instance ||= UserNotificationRenderer.with_view_paths(
Rails.configuration.paths["app/views"]
)
@instance.render(*args)
end
end
end