Skip to content

Commit a93557b

Browse files
committed
Merge pull request websocket-rails#193 from maharifu/master
Add verification of parsing results in Event.
2 parents 060af46 + a553456 commit a93557b

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

lib/websocket_rails/event.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ def self.new_from_json(encoded_data, connection)
7171
case encoded_data
7272
when String
7373
event_name, data = JSON.parse encoded_data
74+
75+
unless event_name.is_a?(String) && data.is_a?(Hash)
76+
raise UnknownDataType
77+
end
78+
7479
data = data.merge(:connection => connection).with_indifferent_access
7580
Event.new event_name, data
7681
# when Array

spec/unit/event_spec.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ module WebsocketRails
99
let(:channel_encoded_message_string) { '["new_message",{"id":"1234","channel":"awesome_channel","user_id":null,"data":"this is a message","success":null,"result":null,"token":null,"server_token":"1234"}]' }
1010
let(:synchronizable_encoded_message) { '["new_message",{"id":"1234","data":{"message":"this is a message"},"server_token":"1234"}]' }
1111
let(:connection) { double('connection') }
12+
let(:wrongly_encoded_message) { '["new_message",[{"id":"1234","data":{"message":"this is a message"}}]]' }
1213

1314
before { connection.stub!(:id).and_return(1) }
1415

@@ -31,6 +32,13 @@ module WebsocketRails
3132
event.data[:message].should == 'this is a message'
3233
end
3334
end
35+
36+
context "invalid messages" do
37+
it "should return an invalid event if data is wrongly encoded" do
38+
event = Event.new_from_json( wrongly_encoded_message, connection )
39+
event.is_invalid?.should be_true
40+
end
41+
end
3442
end
3543

3644
describe ".new_on_open" do

0 commit comments

Comments
 (0)