[qt/qt/qtquick3d-assimp]: Summary of bulk changes made

KDE Git Services - Bulk Change <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git repository change summary for qt/qt/qtquick3d-assimp
Pushed by mirror-service into branch 'upstream/master'.
Changed from a939f2479513a4d92060f2348909886b67d548aa to bd301ee4d128cec5bb11e16b266f4f9bcb6a8d58
Acknowledgement was received that this change introduces only existing code that has been pushed to another public open source repository.

This change contains the following new commits:

Git commit bd301ee4d128cec5bb11e16b266f4f9bcb6a8d58 by GitHub (on behalf of alb3e3) on 29/07/2026 at 11:37..
Fix double-free copying meshes with sparse or empty UV/color channels (fixes #6620) (#6751)

* Add regression test for aliased mesh channels in SceneCombiner::Copy

Copying a mesh with a populated UV/color channel that is either not the
first channel or belongs to a mesh reporting zero vertices must give the
copy its own buffers. On master the copy aliases the source arrays, so
destroying both double-frees them (assimp/assimp#6620). The test asserts
the pointers differ; it also trips AddressSanitizer without the fix.

Assisted-by: Claude Code (Claude Opus 5)

* Fix double-free when copying meshes with sparse or empty UV/color channels

SceneCombiner::Copy(aiMesh) flat-copies the mesh and then reallocates
each array so the copy owns its own storage. UV and color channels were
reallocated with 'while (HasTextureCoords(n))' / 'while (HasVertexColors(n))'.
aiMesh::HasTextureCoords(n) returns false once mTextureCoords[n] is null
*or* mNumVertices == 0, so the loop stopped at the first empty channel and
skipped every channel of a zero-vertex mesh. Those channels kept the
flat-copied pointer into the source mesh, and because the destructor frees
every non-null channel of all AI_MAX_NUMBER_OF_* slots, they were freed
twice (assimp/assimp#6620).

A PLY imported with aiProcess_JoinIdenticalVertices reaches exactly this
state (mNumVertices == 0 with mTextureCoords[0] still allocated), so
importing it and passing the scene to Exporter::ExportToBlob double-frees.

Reallocate every populated UV and color channel unconditionally, matching
what the destructor frees.

Assisted-by: Claude Code (Claude Opus 5)

* Fix indentation and structure in SceneCombiner.cpp

* Refactor logging and null checks in SceneCombiner

Updated logging messages to use ASSIMP_LOG_ERROR for error cases and improved null pointer checks for prefix parameters.

* Update SceneCombiner.cpp

---------

Co-authored-by: Kim Kulling <[email protected]>
https://invent.kde.org/qt/qt/qtquick3d-assimp/-/commit/bd301ee4d128cec5bb11e16b266f4f9bcb6a8d58
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.