Explanation: The return value of ExtractData is never checked anywhere in code. However if it returns false, outData remains uninitialized. All code using ExtractData assumes outData is initialized and proceeds to using it. I haven't encountered a real-life case where this goes wrong - but the simple fact that it can go wrong is a red flag. Instead of relying on every bit of code checking the return value and handling this properly, I think it makes much more sense to have ExtractData throw an exception. It obviously is an exceptional situation, and throwing makes sure that no code that doesn't explicitly handle such a scenario continues running and potentially causing harm.
The following changes were tested against building with a master copy.
For a more detailed report, please read the followings below:
The flags that were checked were the ones checked by default + the following:
ASSIMP_BUILD_ASSIMP_VIEW
ASSIMP_BUILD_SAMPLES
The list of compilable projects in Visual Studio were the following:
- assimp
- assimp_cmd
- assimp_simpleogl
- assimp_simpletextureddirectx11
- assimp_simpletexturedogl
- assimp_viewer
- INSTALL
- IrrXML
- uninstall
- unit
- UpdateAssimpLibsDebugSymbolsAndDLLs
- ZERO_CHECK
- zlib
- zlibstatic
The solution that was generated with the new changes comprised the same number of projects as the one from the master, unmodified. All projects except UpdateAssimpLibsDebugSymbolsAndDLLs were built without any error. All tests were run.
UpdateAssimpLibsDebugSymbolsAndDLLs could not be built because of the reasons explained in issue #3004.
If ASSIMP_NO_EXPORT is not defined:
- don't add the macro for the exporters
- don't include the files for all the exporter
- don't display any messages about what exporters are enabled or not
- make use of range for loops
- make use of empty() method for the std::vector
- removed unnecessary std::string initialization
- use ' ' instead of " " for the find methods (should be "faster")
- simplified some function
- make use of emplace_back instead of push_back (should be "faster")
- other small changes
- Moved TextureTypeToString to it's own file.
- Added new file to CMakeLists.txt.
- Added 6 missing values in TextureTypeToString.
- Added 6 missing aiTextureType enum values in assimp_cmd/Info.cpp.