Check if JID is valid when calling setName and ignore buddies with invalid JID

This commit is contained in:
HanzZ 2012-08-07 17:41:13 +02:00
parent fcdddf9da4
commit 83f5f36c94
5 changed files with 13 additions and 9 deletions

View file

@ -169,11 +169,11 @@ class Buddy {
protected:
void generateJID();
Swift::JID m_jid;
private:
long m_id;
// Swift::Presence::ref m_lastPresence;
Swift::JID m_jid;
BuddyFlag m_flags;
RosterManager *m_rosterManager;
Subscription m_subscription;

View file

@ -51,9 +51,11 @@ long Buddy::getID() {
void Buddy::setFlags(BuddyFlag flags) {
m_flags = flags;
try {
generateJID();
} catch (...) {
if (!getSafeName().empty()) {
try {
generateJID();
} catch (...) {
}
}
}

View file

@ -39,7 +39,7 @@ bool LocalBuddy::setName(const std::string &name) {
m_name = name;
try {
generateJID();
return true;
return m_jid.isValid();
} catch (...) {
m_name = oldName;
return false;

View file

@ -95,6 +95,7 @@ class NetworkFactory : public Factory {
Buddy *createBuddy(RosterManager *rosterManager, const BuddyInfo &buddyInfo) {
LocalBuddy *buddy = new LocalBuddy(rosterManager, buddyInfo.id);
buddy->setAlias(buddyInfo.alias);
buddy->setFlags((BuddyFlag) (buddyInfo.flags));
if (!buddy->setName(buddyInfo.legacyName)) {
delete buddy;
return NULL;
@ -106,7 +107,6 @@ class NetworkFactory : public Factory {
buddy->setSubscription(Buddy::Ask);
}
buddy->setGroups(buddyInfo.groups);
buddy->setFlags((BuddyFlag) (buddyInfo.flags));
if (buddyInfo.settings.find("icon_hash") != buddyInfo.settings.end())
buddy->setIconHash(buddyInfo.settings.find("icon_hash")->second.s);
return buddy;

View file

@ -524,9 +524,11 @@ void RosterManager::setStorageBackend(StorageBackend *storageBackend) {
for (std::list<BuddyInfo>::const_iterator it = roster.begin(); it != roster.end(); it++) {
Buddy *buddy = m_component->getFactory()->createBuddy(this, *it);
LOG4CXX_INFO(logger, m_user->getJID().toString() << ": Adding cached buddy " << buddy->getName() << " fom database");
m_buddies[buddy->getName()] = buddy;
onBuddySet(buddy);
if (buddy) {
LOG4CXX_INFO(logger, m_user->getJID().toString() << ": Adding cached buddy " << buddy->getName() << " fom database");
m_buddies[buddy->getName()] = buddy;
onBuddySet(buddy);
}
}
m_rosterStorage = storage;