From 2b523030cf8da39ac5f9c9bb189aac93f86dc3e8 Mon Sep 17 00:00:00 2001 From: Evgeny Khramtsov Date: Sun, 19 May 2019 11:22:41 +0300 Subject: [PATCH] Report better errors on SQL terms decode failure --- src/ejabberd_sql.erl | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) 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) ->