Merge branch 'assimp:master' into master
commit
a9a1c20fe9
|
@ -52,6 +52,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <assimp/importerdesc.h>
|
#include <assimp/importerdesc.h>
|
||||||
#include <assimp/StreamReader.h>
|
#include <assimp/StreamReader.h>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
using namespace Assimp;
|
using namespace Assimp;
|
||||||
|
|
||||||
|
@ -160,6 +161,9 @@ void NDOImporter::InternReadFile( const std::string& pFile,
|
||||||
|
|
||||||
temp = file_format >= 12 ? reader.GetU4() : reader.GetU2();
|
temp = file_format >= 12 ? reader.GetU4() : reader.GetU2();
|
||||||
head = (const char*)reader.GetPtr();
|
head = (const char*)reader.GetPtr();
|
||||||
|
if (std::numeric_limits<unsigned int>::max() - 76 < temp) {
|
||||||
|
throw DeadlyImportError("Invalid name length");
|
||||||
|
}
|
||||||
reader.IncPtr(temp + 76); /* skip unknown stuff */
|
reader.IncPtr(temp + 76); /* skip unknown stuff */
|
||||||
|
|
||||||
obj.name = std::string(head, temp);
|
obj.name = std::string(head, temp);
|
||||||
|
|
|
@ -312,12 +312,7 @@ std::string BaseImporter::GetExtension(const std::string &pFile) {
|
||||||
if (!pIOHandler) {
|
if (!pIOHandler) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
union {
|
const char *magic = reinterpret_cast<const char *>(_magic);
|
||||||
const char *magic;
|
|
||||||
const uint16_t *magic_u16;
|
|
||||||
const uint32_t *magic_u32;
|
|
||||||
};
|
|
||||||
magic = reinterpret_cast<const char *>(_magic);
|
|
||||||
std::unique_ptr<IOStream> pStream(pIOHandler->Open(pFile));
|
std::unique_ptr<IOStream> pStream(pIOHandler->Open(pFile));
|
||||||
if (pStream) {
|
if (pStream) {
|
||||||
|
|
||||||
|
@ -339,15 +334,15 @@ std::string BaseImporter::GetExtension(const std::string &pFile) {
|
||||||
// that's just for convenience, the chance that we cause conflicts
|
// that's just for convenience, the chance that we cause conflicts
|
||||||
// is quite low and it can save some lines and prevent nasty bugs
|
// is quite low and it can save some lines and prevent nasty bugs
|
||||||
if (2 == size) {
|
if (2 == size) {
|
||||||
uint16_t rev = *magic_u16;
|
uint16_t magic_u16;
|
||||||
ByteSwap::Swap(&rev);
|
memcpy(&magic_u16, magic, 2);
|
||||||
if (data_u16[0] == *magic_u16 || data_u16[0] == rev) {
|
if (data_u16[0] == magic_u16 || data_u16[0] == ByteSwap::Swapped(magic_u16)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else if (4 == size) {
|
} else if (4 == size) {
|
||||||
uint32_t rev = *magic_u32;
|
uint32_t magic_u32;
|
||||||
ByteSwap::Swap(&rev);
|
memcpy(&magic_u32, magic, 4);
|
||||||
if (data_u32[0] == *magic_u32 || data_u32[0] == rev) {
|
if (data_u32[0] == magic_u32 || data_u32[0] == ByteSwap::Swapped(magic_u32)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue