diff options
author | Evgeniy Khramtsov <xramtsov@gmail.com> | 2009-06-09 03:53:36 +0000 |
---|---|---|
committer | Evgeniy Khramtsov <xramtsov@gmail.com> | 2009-06-09 03:53:36 +0000 |
commit | b7fd730409dba14ec3492b37a1bded6e5ea24163 (patch) | |
tree | 1ace0a0248051b103aa06aec8ab72657b901b7a6 | |
parent | Update Spanish translation (diff) |
Malformed CAPTCHA response may crash a room. This is now fixed.
SVN Revision: 2148
Diffstat (limited to '')
-rw-r--r-- | src/ejabberd_captcha.erl | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/src/ejabberd_captcha.erl b/src/ejabberd_captcha.erl index 71a711fee..95d44ef2a 100644 --- a/src/ejabberd_captcha.erl +++ b/src/ejabberd_captcha.erl @@ -153,22 +153,26 @@ process_reply({xmlelement, "captcha", _, _} = El) -> {error, malformed}; Xdata -> Fields = jlib:parse_xdata_submit(Xdata), - [Id | _] = proplists:get_value("challenge", Fields, [none]), - [OCR | _] = proplists:get_value("ocr", Fields, [none]), - ?T(case mnesia:read(captcha, Id, write) of - [#captcha{pid=Pid, args=Args, key=Key, tref=Tref}] -> - mnesia:delete({captcha, Id}), - erlang:cancel_timer(Tref), - if OCR == Key -> - Pid ! {captcha_succeed, Args}, - ok; - true -> - Pid ! {captcha_failed, Args}, - {error, bad_match} - end; - _ -> - {error, not_found} - end) + case {proplists:get_value("challenge", Fields), + proplists:get_value("ocr", Fields)} of + {[Id|_], [OCR|_]} -> + ?T(case mnesia:read(captcha, Id, write) of + [#captcha{pid=Pid, args=Args, key=Key, tref=Tref}] -> + mnesia:delete({captcha, Id}), + erlang:cancel_timer(Tref), + if OCR == Key -> + Pid ! {captcha_succeed, Args}, + ok; + true -> + Pid ! {captcha_failed, Args}, + {error, bad_match} + end; + _ -> + {error, not_found} + end); + _ -> + {error, malformed} + end end; process_reply(_) -> {error, malformed}. |