a883f555aed307d3be01e53824805eb354aa8fba
This commit enables Blender 4.5 to use (to some extent) blendfiles from Blender 5.0 and later using 'long' ID names (i.e. ID names over 63 bytes). On a more general perspective, it also introduces safer handling of potentially corrupted ID names in a blendfile. This is achieved by carefully checking for non-null terminated ID names early on in readfile process, and then: * Truncating and ensuring uniqueness of ID names. * Doing similar process for action slot and slot users identifiers. * In linking (and appending) context, such IDs are totally ignored. They are not listed, and are considered as missing if some other (valid) linked ID attempt to indirectly link them). * Informing users through usual reporting ways. Technically, this mainly changes two areas of the readfile code related to IDs themselves: * The utils `blo_bhead_id_name` that returns the ID name of an ID BHead, without actually reading that ID, now check for a valid null-terminated string of `MAX_ID_NAME` max size, and returns a `nullptr` on error. _This essentially prevents listing and linking such IDs, in any way._ * The actual ID reading code (`read_id_struct`) does the same check, and truncate the ID name to its maximum allowed length. * Both of above checks also set a new FileData flag (`FD_FLAGS_HAS_LONG_ID_NAME`), which is used to ensure that ID names (and related actions slots identifiers) remain unique, and report to info to the user. Implements #137608. Branched out from !137196. Co-authored-by: michal.krupa <michal.krupa@cdprojektred.com> Co-authored-by: Campbell Barton <ideasman42@gmail.com> Pull Request: https://projects.blender.org/blender/blender/pulls/139336
…
Blender
Blender is the free and open source 3D creation suite. It supports the entirety of the 3D pipeline—modeling, rigging, animation, simulation, rendering, compositing, motion tracking and video editing.
Project Pages
Development
License
Blender as a whole is licensed under the GNU General Public License, Version 3. Individual files may have a different but compatible license.
See blender.org/about/license for details.
Description
Languages
C++
78%
Python
14.9%
C
2.9%
GLSL
1.9%
CMake
1.2%
Other
0.9%
