summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Payne (Vir Linden) <vir@lindenlab.com>2019-02-05 21:38:00 +0000
committerBrad Payne (Vir Linden) <vir@lindenlab.com>2019-02-05 21:38:00 +0000
commita77344516ce00ed7b447626c1d57195dd183b7f9 (patch)
tree350bc3bcdcfce05b8fbf2bd62a3f399e901df557
parenta3b3ad727f53aa280ffbcc1b61ccfbb48e988708 (diff)
SL-10471 - animation validation for constraints
-rw-r--r--indra/llappearance/llavatarappearance.cpp2
-rw-r--r--indra/llcharacter/llkeyframemotion.cpp14
2 files changed, 15 insertions, 1 deletions
diff --git a/indra/llappearance/llavatarappearance.cpp b/indra/llappearance/llavatarappearance.cpp
index 92217c60ff..c28b5f8081 100644
--- a/indra/llappearance/llavatarappearance.cpp
+++ b/indra/llappearance/llavatarappearance.cpp
@@ -1350,7 +1350,7 @@ LLVector3 LLAvatarAppearance::getVolumePos(S32 joint_index, LLVector3& volume_of
//-----------------------------------------------------------------------------
LLJoint* LLAvatarAppearance::findCollisionVolume(U32 volume_id)
{
- if ((S32)volume_id > mNumCollisionVolumes)
+ if (((S32)volume_id >= mNumCollisionVolumes) || ((S32)volume_id < 0))
{
return NULL;
}
diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp
index 330d812985..5d323ed5d6 100644
--- a/indra/llcharacter/llkeyframemotion.cpp
+++ b/indra/llcharacter/llkeyframemotion.cpp
@@ -1772,6 +1772,13 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id)
bin_data[BIN_DATA_LENGTH] = 0; // Ensure null termination
str = (char*)bin_data;
constraintp->mSourceConstraintVolume = mCharacter->getCollisionVolumeID(str);
+ if (constraintp->mSourceConstraintVolume == -1)
+ {
+ LL_WARNS() << "not a valid source constraint volume " << str
+ << " for animation " << asset_id << LL_ENDL;
+ delete constraintp;
+ return FALSE;
+ }
if (!dp.unpackVector3(constraintp->mSourceConstraintOffset, "source_offset"))
{
@@ -1808,6 +1815,13 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id)
{
constraintp->mConstraintTargetType = CONSTRAINT_TARGET_TYPE_BODY;
constraintp->mTargetConstraintVolume = mCharacter->getCollisionVolumeID(str);
+ if (constraintp->mTargetConstraintVolume == -1)
+ {
+ LL_WARNS() << "not a valid target constraint volume " << str
+ << " for animation " << asset_id << LL_ENDL;
+ delete constraintp;
+ return FALSE;
+ }
}
if (!dp.unpackVector3(constraintp->mTargetConstraintOffset, "target_offset"))