summaryrefslogtreecommitdiff
path: root/src/ejabberd_sql.erl
diff options
context:
space:
mode:
authorEvgeny Khramtsov <ekhramtsov@process-one.net>2019-05-19 11:22:41 +0300
committerEvgeny Khramtsov <ekhramtsov@process-one.net>2019-05-19 11:22:41 +0300
commit2b523030cf8da39ac5f9c9bb189aac93f86dc3e8 (patch)
tree524587ba7005ca7b3b7eeeac5fb7ceebb3819b50 /src/ejabberd_sql.erl
parentCheck 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.erl20
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) ->