Skip to content

Commit 2314122

Browse files
committed
Handle cookies with valid JSON of invalid type
1 parent 4e4599f commit 2314122

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

lib/split/persistence/cookie_adapter.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ def delete_cookie_header!(header, key, value)
7070
def hash
7171
@hash ||= if cookies = @cookies[:split.to_s]
7272
begin
73-
JSON.parse(cookies)
73+
parsed = JSON.parse(cookies)
74+
parsed.is_a?(Hash) ? parsed : {}
7475
rescue JSON::ParserError
7576
{}
7677
end

spec/persistence/cookie_adapter_spec.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,22 @@
2020
subject["my_key"] = "my_value"
2121
expect(subject["my_key"]).to eq("my_value")
2222
end
23+
24+
it "ignores valid JSON of invalid type (integer)" do
25+
context.request.cookies["split"] = "2"
26+
27+
expect(subject["my_key"]).to be_nil
28+
subject["my_key"] = "my_value"
29+
expect(subject["my_key"]).to eq("my_value")
30+
end
31+
32+
it "ignores valid JSON of invalid type (array)" do
33+
context.request.cookies["split"] = "[\"foo\", \"bar\"]"
34+
35+
expect(subject["my_key"]).to be_nil
36+
subject["my_key"] = "my_value"
37+
expect(subject["my_key"]).to eq("my_value")
38+
end
2339
end
2440

2541
describe "#delete" do

0 commit comments

Comments
 (0)