#4248 Add safety checks to LLMeshSkinInfo::asLLSD()

master
Andrey Lihatskiy 2025-06-10 23:14:25 +03:00
parent db95731391
commit 98abff90a7
1 changed files with 23 additions and 7 deletions

View File

@ -1804,13 +1804,21 @@ LLSD LLMeshSkinInfo::asLLSD(bool include_joints, bool lock_scale_if_joint_positi
{
ret["joint_names"][i] = mJointNames[i];
for (U32 j = 0; j < 4; j++)
if (i < mInvBindMatrix.size())
{
for (U32 k = 0; k < 4; k++)
for (U32 j = 0; j < 4; j++)
{
ret["inverse_bind_matrix"][i][j*4+k] = mInvBindMatrix[i].mMatrix[j][k];
for (U32 k = 0; k < 4; k++)
{
ret["inverse_bind_matrix"][i][j*4+k] = mInvBindMatrix[i].mMatrix[j][k];
}
}
}
else
{
LL_WARNS("MESHSKININFO") << "Joint index " << i << " (" << mJointNames[i] << ") exceeds inverse bind matrix size "
<< mInvBindMatrix.size() << LL_ENDL;
}
}
for (U32 i = 0; i < 4; i++)
@ -1821,17 +1829,25 @@ LLSD LLMeshSkinInfo::asLLSD(bool include_joints, bool lock_scale_if_joint_positi
}
}
if ( include_joints && mAlternateBindMatrix.size() > 0 )
if (include_joints && mAlternateBindMatrix.size() > 0)
{
for (U32 i = 0; i < mJointNames.size(); ++i)
{
for (U32 j = 0; j < 4; j++)
if (i < mAlternateBindMatrix.size())
{
for (U32 k = 0; k < 4; k++)
for (U32 j = 0; j < 4; j++)
{
ret["alt_inverse_bind_matrix"][i][j*4+k] = mAlternateBindMatrix[i].mMatrix[j][k];
for (U32 k = 0; k < 4; k++)
{
ret["alt_inverse_bind_matrix"][i][j*4+k] = mAlternateBindMatrix[i].mMatrix[j][k];
}
}
}
else
{
LL_WARNS("MESHSKININFO") << "Joint index " << i << " (" << mJointNames[i] << ") exceeds alternate bind matrix size "
<< mAlternateBindMatrix.size() << LL_ENDL;
}
}
if (lock_scale_if_joint_position)