Comparison

plugins/muc/muc.lib.lua @ 7405:5a65750d959a

MUC: Be more careful with deserialization of rooms, fix case where a bare jid has joined as multiple participants
author Kim Alvefur <zash@zash.se>
date Wed, 27 Apr 2016 18:55:49 +0200
parent 7402:ef7ea3bad7a1
child 7406:92755ca737c3
comparison
equal deleted inserted replaced
7404:57ca4dcd91a7 7405:5a65750d959a
1281 local occupant_sessions = {}; 1281 local occupant_sessions = {};
1282 local room_name, room_host = jid_split(room_jid); 1282 local room_name, room_host = jid_split(room_jid);
1283 for jid, data in pairs(frozen) do 1283 for jid, data in pairs(frozen) do
1284 local node, host, resource = jid_split(jid); 1284 local node, host, resource = jid_split(jid);
1285 if node or host:sub(1,1) ~= "_" then 1285 if node or host:sub(1,1) ~= "_" then
1286 if not resource then 1286 if not resource and type(data) == "string" then
1287 -- bare jid: affiliation 1287 -- bare jid: affiliation
1288 room._affiliations[jid] = data; 1288 room._affiliations[jid] = data;
1289 elseif host == room_host and node == room_name then 1289 elseif host == room_host and node == room_name and resource then
1290 -- full room jid: bare real jid and role 1290 -- full room jid: bare real jid and role
1291 local bare_jid = data.bare_jid; 1291 local bare_jid = data.bare_jid;
1292 local occupant = occupant_lib.new(bare_jid, jid); 1292 local occupant = occupant_lib.new(bare_jid, jid);
1293 occupant.jid = data.jid; 1293 occupant.jid = data.jid;
1294 occupant.role = data.role; 1294 occupant.role = data.role;