aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_sql.erl
diff options
context:
space:
mode:
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 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(<<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) ->