From 73454b06a234488bb1bf962ab5e869ad2cd7a6cd Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Wed, 1 May 2019 08:57:09 -0700 Subject: [PATCH 1/2] Fix crash accessing _modelJointIndicesCache --- .../src/avatars-renderer/Avatar.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 204ed79660..73e623223e 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1428,7 +1428,7 @@ int Avatar::getJointIndex(const QString& name) const { withValidJointIndicesCache([&]() { if (_modelJointIndicesCache.contains(name)) { - result = _modelJointIndicesCache[name] - 1; + result = _modelJointIndicesCache.value(name) - 1; } }); return result; @@ -1439,22 +1439,22 @@ QStringList Avatar::getJointNames() const { withValidJointIndicesCache([&]() { // find out how large the vector needs to be int maxJointIndex = -1; - QHashIterator k(_modelJointIndicesCache); - while (k.hasNext()) { - k.next(); + QHash::const_iterator k = _modelJointIndicesCache.constBegin(); + while (k != _modelJointIndicesCache.constEnd()) { int index = k.value(); if (index > maxJointIndex) { maxJointIndex = index; } + ++k; } // iterate through the hash and put joint names // into the vector at their indices QVector resultVector(maxJointIndex+1); - QHashIterator i(_modelJointIndicesCache); - while (i.hasNext()) { - i.next(); + QHash::const_iterator i = _modelJointIndicesCache.constBegin(); + while (i != _modelJointIndicesCache.constEnd()) { int index = i.value(); resultVector[index] = i.key(); + ++i; } // convert to QList and drop out blanks result = resultVector.toList(); From 6e2ac14c23ac91183d8b8dc30c2ade6ed9f8dc34 Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Wed, 1 May 2019 12:42:41 -0700 Subject: [PATCH 2/2] Change while loops --- .../avatars-renderer/src/avatars-renderer/Avatar.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 73e623223e..cb0acd68cb 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1439,22 +1439,18 @@ QStringList Avatar::getJointNames() const { withValidJointIndicesCache([&]() { // find out how large the vector needs to be int maxJointIndex = -1; - QHash::const_iterator k = _modelJointIndicesCache.constBegin(); - while (k != _modelJointIndicesCache.constEnd()) { + for (auto k = _modelJointIndicesCache.constBegin(); k != _modelJointIndicesCache.constEnd(); k++) { int index = k.value(); if (index > maxJointIndex) { maxJointIndex = index; } - ++k; } // iterate through the hash and put joint names // into the vector at their indices QVector resultVector(maxJointIndex+1); - QHash::const_iterator i = _modelJointIndicesCache.constBegin(); - while (i != _modelJointIndicesCache.constEnd()) { + for (auto i = _modelJointIndicesCache.constBegin(); i != _modelJointIndicesCache.constEnd(); i++) { int index = i.value(); resultVector[index] = i.key(); - ++i; } // convert to QList and drop out blanks result = resultVector.toList();