Mercurial > prosody-hg
comparison plugins/muc/muc.lib.lua @ 4424:1cbf3744300c
MUC: Fix a possible stack overflow (when a local component joins a room, then disconnects, an unavailble-error presence cycle can occur).
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Mon, 21 Nov 2011 19:59:38 +0500 |
| parents | d6928b78c548 |
| children | 875b90d5ce0f |
comparison
equal
deleted
inserted
replaced
| 4418:70b5e533325d | 4424:1cbf3744300c |
|---|---|
| 356 self:handle_to_occupant(origin, build_unavailable_presence_from_error(stanza)); | 356 self:handle_to_occupant(origin, build_unavailable_presence_from_error(stanza)); |
| 357 end | 357 end |
| 358 elseif type == "unavailable" then -- unavailable | 358 elseif type == "unavailable" then -- unavailable |
| 359 if current_nick then | 359 if current_nick then |
| 360 log("debug", "%s leaving %s", current_nick, room); | 360 log("debug", "%s leaving %s", current_nick, room); |
| 361 self._jid_nick[from] = nil; | |
| 361 local occupant = self._occupants[current_nick]; | 362 local occupant = self._occupants[current_nick]; |
| 362 local new_jid = next(occupant.sessions); | 363 local new_jid = next(occupant.sessions); |
| 363 if new_jid == from then new_jid = next(occupant.sessions, new_jid); end | 364 if new_jid == from then new_jid = next(occupant.sessions, new_jid); end |
| 364 if new_jid then | 365 if new_jid then |
| 365 local jid = occupant.jid; | 366 local jid = occupant.jid; |
| 380 else | 381 else |
| 381 occupant.role = 'none'; | 382 occupant.role = 'none'; |
| 382 self:broadcast_presence(pr, from); | 383 self:broadcast_presence(pr, from); |
| 383 self._occupants[current_nick] = nil; | 384 self._occupants[current_nick] = nil; |
| 384 end | 385 end |
| 385 self._jid_nick[from] = nil; | |
| 386 end | 386 end |
| 387 elseif not type then -- available | 387 elseif not type then -- available |
| 388 if current_nick then | 388 if current_nick then |
| 389 --if #pr == #stanza or current_nick ~= to then -- commented because google keeps resending directed presence | 389 --if #pr == #stanza or current_nick ~= to then -- commented because google keeps resending directed presence |
| 390 if current_nick == to then -- simple presence | 390 if current_nick == to then -- simple presence |
