Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2010-11-04 23:10:18 +0300
committerBadlop <badlop@process-one.net>2010-11-06 23:53:13 +0300
commit29fbe6d8e17fecf7fab8a173f2e64e552b74dc9b (patch)
tree10f93b6f19eeaa181c37a9ae1ac3cbaf3418f37d /src/ejabberd_c2s.erl
parent5c3611fe32c491efacbf5310cadb68ca8c3a604a (diff)
Do not store long language tag to avoid possible DoS/flood attacks
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r--src/ejabberd_c2s.erl14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index 975f79423..383823ace 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -321,7 +321,19 @@ wait_for_stream({xmlstreamstart, #xmlel{ns = NS} = Opening}, StateData) ->
Server = binary_to_list(ServerB),
case ?IS_MY_HOST(Server) of
true ->
- Lang = exmpp_stream:get_lang(Opening),
+ Lang = case exmpp_stream:get_lang(Opening) of
+ Lang1 when is_binary(Lang1) andalso size(Lang1) =< 35 ->
+ %% As stated in BCP47, 4.4.1:
+ %% Protocols or specifications that
+ %% specify limited buffer sizes for
+ %% language tags MUST allow for
+ %% language tags of at least 35 characters.
+ Lang1;
+ _ ->
+ %% Do not store long language tag to
+ %% avoid possible DoS/flood attacks
+ undefined
+ end,
change_shaper(StateData,
exmpp_jid:make(ServerB)),
case exmpp_stream:get_version(Opening) of