|
@@ -54,6 +54,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
#include <assimp/Exceptional.h>
|
|
#include <assimp/Exceptional.h>
|
|
#include <assimp/ByteSwapper.h>
|
|
#include <assimp/ByteSwapper.h>
|
|
#include <assimp/DefaultLogger.hpp>
|
|
#include <assimp/DefaultLogger.hpp>
|
|
|
|
+#include <assimp/StringUtils.h>
|
|
|
|
|
|
namespace Assimp {
|
|
namespace Assimp {
|
|
namespace FBX {
|
|
namespace FBX {
|
|
@@ -456,10 +457,20 @@ void TokenizeBinary(TokenList& output_tokens, const char* input, size_t length)
|
|
ASSIMP_LOG_DEBUG_F("FBX version: ", version);
|
|
ASSIMP_LOG_DEBUG_F("FBX version: ", version);
|
|
const bool is64bits = version >= 7500;
|
|
const bool is64bits = version >= 7500;
|
|
const char *end = input + length;
|
|
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 (!is64bits && (length > std::numeric_limits<std::uint32_t>::max())) {
|
|
|
|
+ throw DeadlyImportError("The FBX file 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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|