diff --git a/src/ejabberd_sql.erl b/src/ejabberd_sql.erl index f807b0bca..3431e61b8 100644 --- a/src/ejabberd_sql.erl +++ b/src/ejabberd_sql.erl @@ -276,9 +276,23 @@ encode_term(Term) -> decode_term(Bin) -> Str = binary_to_list(<>), - {ok, Tokens, _} = erl_scan:string(Str), - {ok, Term} = erl_parse:parse_term(Tokens), - Term. + try + {ok, Tokens, _} = erl_scan:string(Str), + {ok, Term} = erl_parse:parse_term(Tokens), + Term + catch _:{badmatch, {error, {Line, Mod, Reason}, _}} -> + ?ERROR_MSG("Corrupted Erlang term in SQL database:~n" + "** Scanner error: at line ~B: ~s~n" + "** Term: ~s", + [Line, Mod:format_error(Reason), Bin]), + erlang:error(badarg); + _:{badmatch, {error, {Line, Mod, Reason}}} -> + ?ERROR_MSG("Corrupted Erlang term in SQL database:~n" + "** Parser error: at line ~B: ~s~n" + "** Term: ~s", + [Line, Mod:format_error(Reason), Bin]), + erlang:error(badarg) + end. -spec sqlite_db(binary()) -> atom(). sqlite_db(Host) ->