diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-01-11 14:35:11 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-01-11 14:35:11 +0300 |
commit | 65e6dfb9ddadacc147fe460cfd9bd499a83db429 (patch) | |
tree | b2e9b998d5c408f3e54f4a1dca6584c27d2c0b56 /src/mod_mam.erl | |
parent | CVE-2016-1232: Add Dialback Key Generation and Validation support (XEP-0185) (diff) |
Do not fail on incorrect data coming from SQL (898)
Diffstat (limited to 'src/mod_mam.erl')
-rw-r--r-- | src/mod_mam.erl | 45 |
1 files changed, 27 insertions, 18 deletions
diff --git a/src/mod_mam.erl b/src/mod_mam.erl index 6dfff605..f334152f 100644 --- a/src/mod_mam.erl +++ b/src/mod_mam.erl @@ -756,25 +756,34 @@ select(LServer, #jid{luser = LUser} = JidRequestor, true -> {Res, true} end, - {lists:map( + {lists:flatmap( fun([TS, XML, PeerBin, Kind, Nick]) -> - #xmlel{} = El = xml_stream:parse_element(XML), - Now = usec_to_now(jlib:binary_to_integer(TS)), - PeerJid = jid:tolower(jid:from_string(PeerBin)), - T = case Kind of - <<"">> -> chat; - null -> chat; - _ -> jlib:binary_to_atom(Kind) - end, - {TS, jlib:binary_to_integer(TS), - msg_to_el(#archive_msg{timestamp = Now, - packet = El, - type = T, - nick = Nick, - peer = PeerJid}, - MsgType, - JidRequestor)} - end, Res1), IsComplete, jlib:binary_to_integer(Count)}; + try + #xmlel{} = El = xml_stream:parse_element(XML), + Now = usec_to_now(jlib:binary_to_integer(TS)), + PeerJid = jid:tolower(jid:from_string(PeerBin)), + T = case Kind of + <<"">> -> chat; + null -> chat; + _ -> jlib:binary_to_atom(Kind) + end, + [{TS, jlib:binary_to_integer(TS), + msg_to_el(#archive_msg{timestamp = Now, + packet = El, + type = T, + nick = Nick, + peer = PeerJid}, + MsgType, + JidRequestor)}] + catch _:Err -> + ?ERROR_MSG("failed to parse data from SQL: ~p. " + "The data was: " + "timestamp = ~s, xml = ~s, " + "peer = ~s, kind = ~s, nick = ~s", + [Err, TS, XML, PeerBin, Kind, Nick]), + [] + end + end, Res1), IsComplete, jlib:binary_to_integer(Count)}; _ -> {[], false, 0} end. |