Răsfoiți Sursa

Fixes crash when importing invalid glTF/2.0 files

Skips some glTF/2.0 uv processing if the count of uvs in the attribute stream doesn't match the vertex count.

This happens with some malformed glTF/2.0 files, and the change will allow them to be processed properly.
Without the change, an access violation will occur several lines below if uv count is less than the position count.
gstanlo 7 ani în urmă
părinte
comite
82f3d40d60
1 a modificat fișierele cu 6 adăugiri și 0 ștergeri
  1. 6 0
      code/glTF2Importer.cpp

+ 6 - 0
code/glTF2Importer.cpp

@@ -436,6 +436,12 @@ void glTF2Importer::ImportMeshes(glTF2::Asset& r)
             }
 
             for (size_t tc = 0; tc < attr.texcoord.size() && tc < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++tc) {
+                if (attr.texcoord[tc]->count != aim->mNumVertices) {
+                    DefaultLogger::get()->warn("Texcoord stream size in mesh \"" + mesh.name +
+                                               "\" does not match the vertex count");
+                    continue;
+                }
+
                 attr.texcoord[tc]->ExtractData(aim->mTextureCoords[tc]);
                 aim->mNumUVComponents[tc] = attr.texcoord[tc]->GetNumComponents();