Skip to content

Commit a11105e

Browse files
committed
Merge pull request #184 from twitter/mutating-global-regression
fix regression with mutation of global state
2 parents 8d76eef + 2b41aca commit a11105e

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

lib/secure_headers/headers/content_security_policy.rb

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -133,15 +133,6 @@ def initialize(config=nil, options={})
133133
@ua = options[:ua]
134134
@ssl_request = !!options.delete(:ssl)
135135
@request_uri = options.delete(:request_uri)
136-
@http_additions = config.delete(:http_additions)
137-
@disable_img_src_data_uri = !!config.delete(:disable_img_src_data_uri)
138-
@tag_report_uri = !!config.delete(:tag_report_uri)
139-
@script_hashes = config.delete(:script_hashes) || []
140-
@app_name = config.delete(:app_name)
141-
@app_name = @app_name.call(@controller) if @app_name.respond_to?(:call)
142-
@enforce = config.delete(:enforce)
143-
@enforce = @enforce.call(@controller) if @enforce.respond_to?(:call)
144-
@enforce = !!@enforce
145136

146137
# Config values can be string, array, or lamdba values
147138
@config = config.inject({}) do |hash, (key, value)|
@@ -153,14 +144,22 @@ def initialize(config=nil, options={})
153144
translate_dir_value(val)
154145
end.flatten.uniq
155146
end
156-
elsif key != :script_hash_middleware
157-
raise ArgumentError.new("Unknown directive supplied: #{key}")
158147
end
159148

160149
hash[key] = config_val
161150
hash
162151
end
163152

153+
@http_additions = @config.delete(:http_additions)
154+
@disable_img_src_data_uri = !!@config.delete(:disable_img_src_data_uri)
155+
@tag_report_uri = !!@config.delete(:tag_report_uri)
156+
@script_hashes = @config.delete(:script_hashes) || []
157+
@app_name = @config.delete(:app_name)
158+
@app_name = @app_name.call(@controller) if @app_name.respond_to?(:call)
159+
@enforce = @config.delete(:enforce)
160+
@enforce = @enforce.call(@controller) if @enforce.respond_to?(:call)
161+
@enforce = !!@enforce
162+
164163
# normalize and tag the report-uri
165164
if @config[:report_uri]
166165
@config[:report_uri] = @config[:report_uri].map do |report_uri|

spec/lib/secure_headers/headers/content_security_policy_spec.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,14 @@ def request_for user_agent, request_uri=nil, options={:ssl => false}
142142
end
143143

144144
describe "#value" do
145+
it "does not mutate shared state" do
146+
opts = default_opts.merge(enforce: true)
147+
policy = ContentSecurityPolicy.new(opts, :request => request_for(CHROME))
148+
expect(policy.name).to eq("Content-Security-Policy")
149+
policy = ContentSecurityPolicy.new(opts, :request => request_for(CHROME))
150+
expect(policy.name).to eq("Content-Security-Policy")
151+
end
152+
145153
context "browser sniffing" do
146154
let(:complex_opts) do
147155
ALL_DIRECTIVES.inject({}) { |memo, directive| memo[directive] = "'self'"; memo }.merge(:block_all_mixed_content => '')

0 commit comments

Comments
 (0)