Merge branch 'master' into master
commit
8125e06f49
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
||||||
|
|
||||||
Copyright (c) 2006-2020, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
|
@ -117,7 +116,7 @@ public:
|
||||||
Mask = 0xf,
|
Mask = 0xf,
|
||||||
};
|
};
|
||||||
|
|
||||||
inline constexpr uint8_t GetType() const { return (flags & Mask); }
|
inline const uint8_t GetType() const { return (flags & Mask); }
|
||||||
};
|
};
|
||||||
|
|
||||||
// Represents an AC3D object
|
// Represents an AC3D object
|
||||||
|
|
|
@ -560,18 +560,17 @@ inline void BufferView::Read(Value &obj, Asset &r) {
|
||||||
buffer = r.buffers.Retrieve(bufferVal->GetUint());
|
buffer = r.buffers.Retrieve(bufferVal->GetUint());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!buffer) {
|
||||||
|
throw DeadlyImportError("GLTF: Buffer view without valid buffer.");
|
||||||
|
}
|
||||||
|
|
||||||
byteOffset = MemberOrDefault(obj, "byteOffset", size_t(0));
|
byteOffset = MemberOrDefault(obj, "byteOffset", size_t(0));
|
||||||
byteLength = MemberOrDefault(obj, "byteLength", size_t(0));
|
byteLength = MemberOrDefault(obj, "byteLength", size_t(0));
|
||||||
byteStride = MemberOrDefault(obj, "byteStride", 0u);
|
byteStride = MemberOrDefault(obj, "byteStride", 0u);
|
||||||
|
|
||||||
// Check length
|
// Check length
|
||||||
if ((byteOffset + byteLength) > buffer->byteLength) {
|
if ((byteOffset + byteLength) > buffer->byteLength) {
|
||||||
const uint8_t val_size = 64;
|
throw DeadlyImportError("GLTF: Buffer view with offset/length (", byteOffset, "/", byteLength, ") is out of range.");
|
||||||
|
|
||||||
char val[val_size];
|
|
||||||
|
|
||||||
ai_snprintf(val, val_size, "%llu, %llu", (unsigned long long)byteOffset, (unsigned long long)byteLength);
|
|
||||||
throw DeadlyImportError("GLTF: Buffer view with offset/length (", val, ") is out of range.");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -649,13 +648,14 @@ inline void Accessor::Read(Value &obj, Asset &r) {
|
||||||
if (bufferView) {
|
if (bufferView) {
|
||||||
// Check length
|
// Check length
|
||||||
unsigned long long byteLength = (unsigned long long)GetBytesPerComponent() * (unsigned long long)count;
|
unsigned long long byteLength = (unsigned long long)GetBytesPerComponent() * (unsigned long long)count;
|
||||||
|
|
||||||
|
// handle integer overflow
|
||||||
|
if (byteLength < count) {
|
||||||
|
throw DeadlyImportError("GLTF: Accessor with offset/count (", byteOffset, "/", count, ") is out of range.");
|
||||||
|
}
|
||||||
|
|
||||||
if ((byteOffset + byteLength) > bufferView->byteLength || (bufferView->byteOffset + byteOffset + byteLength) > bufferView->buffer->byteLength) {
|
if ((byteOffset + byteLength) > bufferView->byteLength || (bufferView->byteOffset + byteOffset + byteLength) > bufferView->buffer->byteLength) {
|
||||||
const uint8_t val_size = 64;
|
throw DeadlyImportError("GLTF: Accessor with offset/length (", byteOffset, "/", byteLength, ") is out of range.");
|
||||||
|
|
||||||
char val[val_size];
|
|
||||||
|
|
||||||
ai_snprintf(val, val_size, "%llu, %llu", (unsigned long long)byteOffset, (unsigned long long)byteLength);
|
|
||||||
throw DeadlyImportError("GLTF: Accessor with offset/length (", val, ") is out of range.");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -145,11 +145,7 @@ int ASSIMP_stricmp(const char *s1, const char *s2) {
|
||||||
#if (defined _MSC_VER)
|
#if (defined _MSC_VER)
|
||||||
|
|
||||||
return ::_stricmp(s1, s2);
|
return ::_stricmp(s1, s2);
|
||||||
#elif defined(__GNUC__)
|
|
||||||
|
|
||||||
return ::strcasecmp(s1, s2);
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
char c1, c2;
|
char c1, c2;
|
||||||
do {
|
do {
|
||||||
c1 = tolower(*s1++);
|
c1 = tolower(*s1++);
|
||||||
|
|
Loading…
Reference in New Issue