瀏覽代碼

closes https://github.com/assimp/assimp/issues/2088: fix possible out-of-bound access in fbx-lerp operaation.

Kim Kulling 7 年之前
父節點
當前提交
43be7abb70
共有 1 個文件被更改,包括 9 次插入8 次删除
  1. 9 8
      code/FBXConverter.cpp

+ 9 - 8
code/FBXConverter.cpp

@@ -2806,16 +2806,14 @@ KeyTimeList Converter::GetKeyTimeList( const KeyFrameListList& inputs )
 }
 }
 
 
 void Converter::InterpolateKeys( aiVectorKey* valOut, const KeyTimeList& keys, const KeyFrameListList& inputs,
 void Converter::InterpolateKeys( aiVectorKey* valOut, const KeyTimeList& keys, const KeyFrameListList& inputs,
-    const aiVector3D& def_value,
-    double& max_time,
-    double& min_time )
-
-{
-    ai_assert( keys.size() );
-    ai_assert( valOut );
+        const aiVector3D& def_value,
+        double& max_time,
+        double& min_time ) {
+    ai_assert( !keys.empty() );
+    ai_assert( nullptr != valOut );
 
 
     std::vector<unsigned int> next_pos;
     std::vector<unsigned int> next_pos;
-    const size_t count = inputs.size();
+    const size_t count( inputs.size() );
 
 
     next_pos.resize( inputs.size(), 0 );
     next_pos.resize( inputs.size(), 0 );
 
 
@@ -2826,6 +2824,9 @@ void Converter::InterpolateKeys( aiVectorKey* valOut, const KeyTimeList& keys, c
             const KeyFrameList& kfl = inputs[ i ];
             const KeyFrameList& kfl = inputs[ i ];
 
 
             const size_t ksize = std::get<0>(kfl)->size();
             const size_t ksize = std::get<0>(kfl)->size();
+            if (ksize == 0) {
+                continue;
+            }
             if ( ksize > next_pos[ i ] && std::get<0>(kfl)->at( next_pos[ i ] ) == time ) {
             if ( ksize > next_pos[ i ] && std::get<0>(kfl)->at( next_pos[ i ] ) == time ) {
                 ++next_pos[ i ];
                 ++next_pos[ i ];
             }
             }