From 914fa668b7bc95bc8b61501c77e34d7588635bbf Mon Sep 17 00:00:00 2001 From: Feng Lee Date: Wed, 29 Apr 2015 17:11:42 +0800 Subject: [PATCH] fix issues #118 - protect from empty sub/unsub topic list --- apps/emqttd/src/emqttd_protocol.erl | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/emqttd/src/emqttd_protocol.erl b/apps/emqttd/src/emqttd_protocol.erl index a979f10b7..403fd3c64 100644 --- a/apps/emqttd/src/emqttd_protocol.erl +++ b/apps/emqttd/src/emqttd_protocol.erl @@ -191,18 +191,27 @@ handle(?PUBACK_PACKET(Type, PacketId), State = #proto_state{session = Session}) end, {ok, NewState}; +%% protect from empty topic list +handle(?SUBSCRIBE_PACKET(PacketId, []), State) -> + send(?SUBACK_PACKET(PacketId, []), State); + handle(?SUBSCRIBE_PACKET(PacketId, TopicTable), State = #proto_state{clientid = ClientId, session = Session}) -> AllowDenies = [check_acl(subscribe, Topic, State) || {Topic, _Qos} <- TopicTable], case lists:member(deny, AllowDenies) of true -> - %%TODO: return 128 QoS when deny... + %%TODO: return 128 QoS when deny... no need to SUBACK? lager:error("SUBSCRIBE from '~s' Denied: ~p", [ClientId, TopicTable]), {ok, State}; false -> + %%TODO: GrantedQos should be renamed. {ok, NewSession, GrantedQos} = emqttd_session:subscribe(Session, TopicTable), send(?SUBACK_PACKET(PacketId, GrantedQos), State#proto_state{session = NewSession}) end; +%% protect from empty topic list +handle(?UNSUBSCRIBE_PACKET(PacketId, []), State) -> + send(?UNSUBACK_PACKET(PacketId), State); + handle(?UNSUBSCRIBE_PACKET(PacketId, Topics), State = #proto_state{session = Session}) -> {ok, NewSession} = emqttd_session:unsubscribe(Session, Topics), send(?UNSUBACK_PACKET(PacketId), State#proto_state{session = NewSession});