diff --git a/src/common/connection_handlers.py b/src/common/connection_handlers.py index 58850cf26..e174b706e 100644 --- a/src/common/connection_handlers.py +++ b/src/common/connection_handlers.py @@ -758,7 +758,7 @@ class ConnectionDisco: if 'jid' not in attr: continue try: - helpers.parse_jid(attr['jid']) + attr['jid'] = helpers.parse_jid(attr['jid']) except common.helpers.InvalidFormat: # jid is not conform continue @@ -1150,7 +1150,10 @@ class ConnectionVcard: storage = query.getTag('storage') metas = storage.getTags('meta') for meta in metas: - jid = helpers.parse_jid(meta.getAttr('jid')) + try: + jid = helpers.parse_jid(meta.getAttr('jid')) + except common.helpers.InvalidFormat: + continue tag = meta.getAttr('tag') data = {'jid': jid} order = meta.getAttr('order') @@ -1518,13 +1521,17 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco, print_status = conf.getTagData('print_status') if not print_status: print_status = conf.getTagData('show_status') - bm = {'name': conf.getAttr('name'), + try: + bm = {'name': conf.getAttr('name'), 'jid': helpers.parse_jid(conf.getAttr('jid')), 'autojoin': autojoin_val, 'minimize': minimize_val, 'password': conf.getTagData('password'), 'nick': conf.getTagData('nick'), 'print_status': print_status} + except common.helpers.InvalidFormat: + log.warn('Invalid JID: %s, ignoring it' % conf.getAttr('jid')) + continue self.bookmarks.append(bm) self.dispatch('BOOKMARKS', self.bookmarks) @@ -1539,14 +1546,22 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco, # http://www.xmpp.org/extensions/xep-0145.html notes = storage.getTags('note') for note in notes: - jid = helpers.parse_jid(note.getAttr('jid')) + try: + jid = helpers.parse_jid(note.getAttr('jid')) + except common.helpers.InvalidFormat: + log.warn('Invalid JID: %s, ignoring it' % note.getAttr('jid')) + continue annotation = note.getData() self.annotations[jid] = annotation def _rosterSetCB(self, con, iq_obj): log.debug('rosterSetCB') for item in iq_obj.getTag('query').getChildren(): - jid = helpers.parse_jid(item.getAttr('jid')) + try: + jid = helpers.parse_jid(item.getAttr('jid')) + except common.helpers.InvalidFormat: + log.warn('Invalid JID: %s, ignoring it' % item.getAttr('jid')) + continue name = item.getAttr('name') sub = item.getAttr('subscription') ask = item.getAttr('ask') @@ -1785,7 +1800,11 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco, action = 'add' for item in msg.getTag('x', namespace=common.xmpp.NS_ROSTERX).getChildren(): - jid = helpers.parse_jid(item.getAttr('jid')) + try: + jid = helpers.parse_jid(item.getAttr('jid')) + except common.helpers.InvalidFormat: + log.warn('Invalid JID: %s, ignoring it' % item.getAttr('jid')) + continue name = item.getAttr('name') groups=[] for group in item.getTags('group'): @@ -1832,7 +1851,11 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco, if addressTag and jid == gajim.get_jid_from_account(self.name): address = addressTag.getTag('address', attrs={'type': 'ofrom'}) if address: - frm = helpers.parse_jid(address.getAttr('jid')) + try: + frm = helpers.parse_jid(address.getAttr('jid')) + except common.helpers.InvalidFormat: + log.warn('Invalid JID: %s, ignoring it' % address.getAttr('jid')) + return jid = gajim.get_jid_without_resource(frm) # invitations @@ -1850,7 +1873,11 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco, xtags = msg.getTags('x') for xtag in xtags: if xtag.getNamespace() == common.xmpp.NS_CONFERENCE and not invite: - room_jid = helpers.parse_jid(xtag.getAttr('jid')) + try: + room_jid = helpers.parse_jid(xtag.getAttr('jid')) + except common.helpers.InvalidFormat: + log.warn('Invalid JID: %s, ignoring it' % xtag.getAttr('jid')) + continue is_continued = False if xtag.getTag('continue'): is_continued = True @@ -2050,7 +2077,11 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco, def dispatch_invite_message(self, invite, frm): item = invite.getTag('invite') - jid_from = helpers.parse_jid(item.getAttr('from')) + try: + jid_from = helpers.parse_jid(item.getAttr('from')) + except common.helpers.InvalidFormat: + log.warn('Invalid JID: %s, ignoring it' % item.getAttr('from')) + return reason = item.getTagData('reason') item = invite.getTag('password') password = invite.getTagData('password') @@ -2254,7 +2285,10 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco, r = destroy.getTagData('reason') if r: reason += ' (%s)' % r - jid = helpers.parse_jid(destroy.getAttr('jid')) + try: + jid = helpers.parse_jid(destroy.getAttr('jid')) + except common.helpers.InvalidFormat: + pass if jid: reason += '\n' + _('You can join this room instead: %s') % jid statusCode = ['destroyed'] @@ -2401,7 +2435,11 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco, users_dict = {} for item in items: if item.has_attr('jid') and item.has_attr('affiliation'): - jid = helpers.parse_jid(item.getAttr('jid')) + try: + jid = helpers.parse_jid(item.getAttr('jid')) + except common.helpers.InvalidFormat: + log.warn('Invalid JID: %s, ignoring it' % item.getAttr('jid')) + return affiliation = item.getAttr('affiliation') users_dict[jid] = {'affiliation': affiliation} if item.has_attr('nick'):