From 66a315cb9cfb38efe906c0f014c98793887e863b Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Fri, 10 Feb 2017 13:13:46 -0800 Subject: [PATCH] cap number of avatar entities --- libraries/avatars/src/AvatarData.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index b6839ee049..0da2ee0282 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -2200,14 +2200,24 @@ void AvatarData::setAttachmentsVariant(const QVariantList& variant) { setAttachmentData(newAttachments); } +const int MAX_NUM_AVATAR_ENTITIES = 42; + void AvatarData::updateAvatarEntity(const QUuid& entityID, const QByteArray& entityData) { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "updateAvatarEntity", Q_ARG(const QUuid&, entityID), Q_ARG(QByteArray, entityData)); return; } _avatarEntitiesLock.withWriteLock([&] { - _avatarEntityData.insert(entityID, entityData); - _avatarEntityDataLocallyEdited = true; + AvatarEntityMap::iterator itr = _avatarEntityData.find(entityID); + if (itr == _avatarEntityData.end()) { + if (_avatarEntityData.size() < MAX_NUM_AVATAR_ENTITIES) { + _avatarEntityData.insert(entityID, entityData); + _avatarEntityDataLocallyEdited = true; + } + } else { + itr.value() = entityData; + _avatarEntityDataLocallyEdited = true; + } }); } @@ -2238,6 +2248,11 @@ AvatarEntityMap AvatarData::getAvatarEntityData() const { } void AvatarData::setAvatarEntityData(const AvatarEntityMap& avatarEntityData) { + if (avatarEntityData.size() > MAX_NUM_AVATAR_ENTITIES) { + // the data is suspect + qCDebug(avatars) << "discard suspect AvatarEntityData with size =" << avatarEntityData.size(); + return; + } if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "setAvatarEntityData", Q_ARG(const AvatarEntityMap&, avatarEntityData)); return;