FBX Version/Size Check
parent
575ce6136d
commit
eaf0587dd8
|
@ -54,6 +54,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include <assimp/Exceptional.h>
|
||||
#include <assimp/ByteSwapper.h>
|
||||
#include <assimp/DefaultLogger.hpp>
|
||||
#include <assimp/StringUtils.h>
|
||||
|
||||
namespace Assimp {
|
||||
namespace FBX {
|
||||
|
@ -456,11 +457,21 @@ void TokenizeBinary(TokenList& output_tokens, const char* input, size_t length)
|
|||
ASSIMP_LOG_DEBUG_F("FBX version: ", version);
|
||||
const bool is64bits = version >= 7500;
|
||||
const char *end = input + length;
|
||||
while (cursor < end ) {
|
||||
if (!ReadScope(output_tokens, input, cursor, input + length, is64bits)) {
|
||||
break;
|
||||
try
|
||||
{
|
||||
while (cursor < end ) {
|
||||
if (!ReadScope(output_tokens, input, cursor, input + length, is64bits)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (const DeadlyImportError& e)
|
||||
{
|
||||
if ((sizeof(size_t) > 4) && !is64bits && (length > std::numeric_limits<std::uint32_t>::max())) {
|
||||
throw DeadlyImportError("The FBX is invalid. This may be because the content is too big for this older version (" + to_string(version) + ") of the FBX format. (" + e.what() + ")");
|
||||
}
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
} // !FBX
|
||||
|
|
Loading…
Reference in New Issue