diff options
author | Evgeny Khramtsov <ekhramtsov@process-one.net> | 2019-05-19 11:22:41 +0300 |
---|---|---|
committer | Evgeny Khramtsov <ekhramtsov@process-one.net> | 2019-05-19 11:22:41 +0300 |
commit | 2b523030cf8da39ac5f9c9bb189aac93f86dc3e8 (patch) | |
tree | 524587ba7005ca7b3b7eeeac5fb7ceebb3819b50 /src/ejabberd_sql.erl | |
parent | Check hooks correctness in Travis CI (diff) |
Report better errors on SQL terms decode failure
Diffstat (limited to 'src/ejabberd_sql.erl')
-rw-r--r-- | src/ejabberd_sql.erl | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/ejabberd_sql.erl b/src/ejabberd_sql.erl index f807b0bc..3431e61b 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(<<Bin/binary, ".">>), - {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) -> |