diff options
author | Mickaël Rémond <mickael.remond@process-one.net> | 2007-07-28 09:36:37 +0000 |
---|---|---|
committer | Mickaël Rémond <mickael.remond@process-one.net> | 2007-07-28 09:36:37 +0000 |
commit | 888acbdb2e9175eac96fd6b4a0a4ab1bb7b33001 (patch) | |
tree | 65a9ee31d84b3278281ae3f147d2b1cb6fa4bcd6 /src/mod_roster_odbc.erl | |
parent | * src/web/ejabberd_web_admin.erl: Code clean-up. (diff) |
* src/mod_roster_odbc.erl: Better error management when bad JID in roster table (EJAB-289).
SVN Revision: 835
Diffstat (limited to 'src/mod_roster_odbc.erl')
-rw-r--r-- | src/mod_roster_odbc.erl | 47 |
1 files changed, 33 insertions, 14 deletions
diff --git a/src/mod_roster_odbc.erl b/src/mod_roster_odbc.erl index 7b0c358d4..dcdf1c45a 100644 --- a/src/mod_roster_odbc.erl +++ b/src/mod_roster_odbc.erl @@ -140,6 +140,7 @@ get_user_roster(Acc, {LUser, LServer}) -> RItems = lists:flatmap( fun(I) -> case raw_to_record(LServer, I) of + %% Bad JID in database: error -> []; #roster{subscription = none, @@ -223,11 +224,20 @@ process_item_set(From, To, {xmlelement, _Name, Attrs, Els}) -> us = {LUser, LServer}, jid = LJID}; [I] -> - (raw_to_record(LServer, I))#roster{ - usj = {LUser, LServer, LJID}, - us = {LUser, LServer}, - jid = LJID, - name = ""} + R = raw_to_record(LServer, I), + case R of + %% Bad JID in database: + error -> + #roster{usj = {LUser, LServer, LJID}, + us = {LUser, LServer}, + jid = LJID}; + _ -> + R#roster{ + usj = {LUser, LServer, LJID}, + us = {LUser, LServer}, + jid = LJID, + name = ""} + end end, Item1 = process_item_attrs(Item, Attrs), Item2 = process_item_els(Item1, Els), @@ -388,16 +398,22 @@ get_subscription_lists(_, User, Server) -> fill_subscription_lists(LServer, [RawI | Is], F, T) -> I = raw_to_record(LServer, RawI), - J = I#roster.jid, - case I#roster.subscription of - both -> - fill_subscription_lists(LServer, Is, [J | F], [J | T]); - from -> - fill_subscription_lists(LServer, Is, [J | F], T); - to -> - fill_subscription_lists(LServer, Is, F, [J | T]); + case I of + %% Bad JID in database: + error -> + fill_subscription_lists(LServer, Is, F, T); _ -> - fill_subscription_lists(LServer, Is, F, T) + J = I#roster.jid, + case I#roster.subscription of + both -> + fill_subscription_lists(LServer, Is, [J | F], [J | T]); + from -> + fill_subscription_lists(LServer, Is, [J | F], T); + to -> + fill_subscription_lists(LServer, Is, F, [J | T]); + _ -> + fill_subscription_lists(LServer, Is, F, T) + end end; fill_subscription_lists(_LServer, [], F, T) -> {F, T}. @@ -427,6 +443,8 @@ process_subscription(Direction, User, Server, JID1, Type, Reason) -> ["username", "jid", "nick", "subscription", "ask", "askmessage", "server", "subscribe", "type"], [I]} -> + %% raw_to_record can return error, but + %% jlib_to_string would fail before this point R = raw_to_record(LServer, I), Groups = case odbc_queries:get_roster_groups(LServer, Username, SJID) of @@ -716,6 +734,7 @@ get_in_pending_subscriptions(Ls, User, Server) -> lists:flatmap( fun(I) -> case raw_to_record(LServer, I) of + %% Bad JID in database: error -> []; R -> |