Skip to content

Commit 1d70d9c

Browse files
authored
Merge pull request getsentry#634 from nateberkopec/fix-async-proc
Temporarily accept string keys in processors.
2 parents d3aff5d + ed939c8 commit 1d70d9c

File tree

8 files changed

+130
-24
lines changed

8 files changed

+130
-24
lines changed

lib/raven/processor/cookies.rb

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
11
module Raven
22
class Processor::Cookies < Processor
33
def process(data)
4-
if data[:request]
5-
# Remove possibly sensitive cookies
6-
data[:request][:cookies] = STRING_MASK if data[:request][:cookies]
7-
8-
if data[:request][:headers] && data[:request][:headers]["Cookie"]
9-
data[:request][:headers]["Cookie"] = STRING_MASK
10-
end
11-
end
4+
process_if_symbol_keys(data) if data[:request]
5+
process_if_string_keys(data) if data["request"]
126

137
data
148
end
9+
10+
private
11+
12+
def process_if_symbol_keys(data)
13+
data[:request][:cookies] = STRING_MASK if data[:request][:cookies]
14+
15+
return unless data[:request][:headers] && data[:request][:headers]["Cookie"]
16+
data[:request][:headers]["Cookie"] = STRING_MASK
17+
end
18+
19+
def process_if_string_keys(data)
20+
data["request"]["cookies"] = STRING_MASK if data["request"]["cookies"]
21+
22+
return unless data["request"]["headers"] && data["request"]["headers"]["Cookie"]
23+
data["request"]["headers"]["Cookie"] = STRING_MASK
24+
end
1525
end
1626
end

lib/raven/processor/http_headers.rb

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,30 @@ def initialize(client)
1010
end
1111

1212
def process(data)
13-
if data[:request] && data[:request][:headers]
14-
data[:request][:headers].keys.select { |k| fields_re.match(k.to_s) }.each do |k|
15-
data[:request][:headers][k] = STRING_MASK
16-
end
17-
end
13+
process_if_symbol_keys(data) if data[:request]
14+
process_if_string_keys(data) if data["request"]
1815

1916
data
2017
end
2118

2219
private
2320

21+
def process_if_symbol_keys(data)
22+
return unless data[:request][:headers]
23+
24+
data[:request][:headers].keys.select { |k| fields_re.match(k.to_s) }.each do |k|
25+
data[:request][:headers][k] = STRING_MASK
26+
end
27+
end
28+
29+
def process_if_string_keys(data)
30+
return unless data["request"]["headers"]
31+
32+
data["request"]["headers"].keys.select { |k| fields_re.match(k) }.each do |k|
33+
data["request"]["headers"][k] = STRING_MASK
34+
end
35+
end
36+
2437
def matches_regexes?(k)
2538
fields_re.match(k.to_s)
2639
end

lib/raven/processor/post_data.rb

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,22 @@
11
module Raven
22
class Processor::PostData < Processor
33
def process(data)
4-
if data[:request] && data[:request][:method] == "POST"
5-
data[:request][:data] = STRING_MASK # Remove possibly sensitive POST data
6-
end
4+
process_if_symbol_keys(data) if data[:request]
5+
process_if_string_keys(data) if data["request"]
76

87
data
98
end
9+
10+
private
11+
12+
def process_if_symbol_keys(data)
13+
return unless data[:request][:method] == "POST"
14+
data[:request][:data] = STRING_MASK
15+
end
16+
17+
def process_if_string_keys(data)
18+
return unless data["request"]["method"] == "POST"
19+
data["request"]["data"] = STRING_MASK
20+
end
1021
end
1122
end
Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,24 @@
11
module Raven
22
class Processor::RemoveStacktrace < Processor
3-
def process(value)
4-
if value[:exception]
5-
value[:exception][:values].map do |single_exception|
6-
single_exception.delete(:stacktrace) if single_exception[:stacktrace]
7-
end
3+
def process(data)
4+
process_if_symbol_keys(data) if data[:exception]
5+
process_if_string_keys(data) if data["exception"]
6+
7+
data
8+
end
9+
10+
private
11+
12+
def process_if_symbol_keys(data)
13+
data[:exception][:values].map do |single_exception|
14+
single_exception.delete(:stacktrace) if single_exception[:stacktrace]
815
end
16+
end
917

10-
value
18+
def process_if_string_keys(data)
19+
data["exception"]["values"].map do |single_exception|
20+
single_exception.delete("stacktrace") if single_exception["stacktrace"]
21+
end
1122
end
1223
end
1324
end

spec/raven/processors/cookies_spec.rb

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
end
1010

1111
it 'should remove cookies' do
12-
data = {
12+
test_data = {
1313
:request => {
1414
:headers => {
1515
"Cookie" => "_sentry-testapp_session=SlRKVnNha2Z",
@@ -20,11 +20,31 @@
2020
}
2121
}
2222

23-
result = @processor.process(data)
23+
result = @processor.process(test_data)
2424

2525
expect(result[:request][:cookies]).to eq("********")
2626
expect(result[:request][:headers]["Cookie"]).to eq("********")
2727
expect(result[:request][:some_other_data]).to eq("still_here")
2828
expect(result[:request][:headers]["AnotherHeader"]).to eq("still_here")
2929
end
30+
31+
it 'should remove cookies even if keys are strings' do
32+
test_data = {
33+
"request" => {
34+
"headers" => {
35+
"Cookie" => "_sentry-testapp_session=SlRKVnNha2Z",
36+
"AnotherHeader" => "still_here"
37+
},
38+
"cookies" => "_sentry-testapp_session=SlRKVnNha2Z",
39+
"some_other_data" => "still_here"
40+
}
41+
}
42+
43+
result = @processor.process(test_data)
44+
45+
expect(result["request"]["cookies"]).to eq("********")
46+
expect(result["request"]["headers"]["Cookie"]).to eq("********")
47+
expect(result["request"]["some_other_data"]).to eq("still_here")
48+
expect(result["request"]["headers"]["AnotherHeader"]).to eq("still_here")
49+
end
3050
end

spec/raven/processors/http_headers_spec.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,20 @@
3838
expect(result[:request][:headers]["User-Defined-Header"]).to eq("********")
3939
expect(result[:request][:headers]["AnotherHeader"]).to eq("still_here")
4040
end
41+
42+
it "should remove headers even if the keys are strings" do
43+
data = {
44+
"request" => {
45+
"headers" => {
46+
"Authorization" => "dontseeme",
47+
"AnotherHeader" => "still_here"
48+
}
49+
}
50+
}
51+
52+
result = @processor.process(data)
53+
54+
expect(result["request"]["headers"]["Authorization"]).to eq("********")
55+
expect(result["request"]["headers"]["AnotherHeader"]).to eq("still_here")
56+
end
4157
end

spec/raven/processors/post_data_spec.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,19 @@
3737

3838
expect(result[:request][:data]).to eq("sensitive_stuff" => "TOP_SECRET-GAMMA")
3939
end
40+
41+
it 'should remove post data when HTTP method is POST and keys are strings' do
42+
data = {
43+
"request" => {
44+
"method" => "POST",
45+
"data" => {
46+
"sensitive_stuff" => "TOP_SECRET-GAMMA"
47+
}
48+
}
49+
}
50+
51+
result = @processor.process(data)
52+
53+
expect(result["request"]["data"]).to eq("********")
54+
end
4055
end

spec/raven/processors/removestacktrace_spec.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
require 'spec_helper'
22
require 'raven/processor/removestacktrace'
3+
require 'active_support/core_ext/hash/keys'
34

45
describe Raven::Processor::RemoveStacktrace do
56
before do
@@ -42,4 +43,13 @@
4243
expect(result[:exception][:values][2][:stacktrace]).to eq(nil)
4344
end
4445
end
46+
47+
it 'should remove stacktraces even when keys are strings' do
48+
data = Raven::Event.capture_exception(build_exception).to_hash.deep_stringify_keys
49+
50+
expect(data["exception"]["values"][0]["stacktrace"]).to_not eq(nil)
51+
result = @processor.process(data)
52+
53+
expect(result["exception"]["values"][0]["stacktrace"]).to eq(nil)
54+
end
4555
end

0 commit comments

Comments
 (0)