summaryrefslogtreecommitdiffhomepage
path: root/src/external
diff options
context:
space:
mode:
authorraysan5 <[email protected]>2021-12-07 19:00:58 +0100
committerraysan5 <[email protected]>2021-12-07 19:00:58 +0100
commit81240fe96068dfe80f8bd03e169da54bde232818 (patch)
tree2ed56f54899c59ae7ab38cdc835a70b75fe34b93 /src/external
parent72f3b00b00b1a1f399169be916de2b3ab8ca0d26 (diff)
downloadraylib-81240fe96068dfe80f8bd03e169da54bde232818.tar.gz
raylib-81240fe96068dfe80f8bd03e169da54bde232818.zip
REVIEWED: vox_loader.h, 64bit issue #2186
Diffstat (limited to 'src/external')
-rw-r--r--src/external/vox_loader.h55
1 files changed, 30 insertions, 25 deletions
diff --git a/src/external/vox_loader.h b/src/external/vox_loader.h
index 0eb5cafb..a7a161c7 100644
--- a/src/external/vox_loader.h
+++ b/src/external/vox_loader.h
@@ -531,29 +531,34 @@ static void Vox_Build_Voxel(VoxArray3D* pvoxArray, int x, int y, int z, int matI
int Vox_LoadFromMemory(unsigned char* pvoxData, unsigned int voxDataSize, VoxArray3D* pvoxarray)
{
//////////////////////////////////////////////////
- //Read VOX file
- //4 bytes: magic number ('V' 'O' 'X' 'space' )
- //4 bytes: version number (current version is 150 )
+ // Read VOX file
+ // 4 bytes: magic number ('V' 'O' 'X' 'space')
+ // 4 bytes: version number (current version is 150)
- unsigned long signature;
+ // @raysan5: Reviewed (unsigned long) -> (unsigned int), possible issue with Ubuntu 18.04 64bit
- unsigned char* fileData = pvoxData;
+ // @raysan5: reviewed signature loading
+ unsigned char signature[4] = { 0 };
+ unsigned char* fileData = pvoxData;
unsigned char* fileDataPtr = fileData;
unsigned char* endfileDataPtr = fileData + voxDataSize;
- signature = *((unsigned long *)fileDataPtr);
- fileDataPtr += sizeof(unsigned long);
+ signature[0] = fileDataPtr[0];
+ signature[1] = fileDataPtr[1];
+ signature[2] = fileDataPtr[2];
+ signature[3] = fileDataPtr[3];
+ fileDataPtr += 4;
- if (signature != 0x20584F56) //56 4F 58 20
+ if ((signature[0] != 'V') && (signature[0] != 'O') && (signature[0] != 'X') && (signature[0] != ' '))
{
return VOX_ERROR_INVALID_FORMAT; //"Not an MagicaVoxel File format"
}
- unsigned long version;
-
- version = *((unsigned long*)fileDataPtr);
- fileDataPtr += sizeof(unsigned long);
+ // @raysan5: reviewed version loading
+ unsigned int version = 0;
+ version = ((unsigned int*)fileDataPtr)[0];
+ fileDataPtr += 4;
if (version < 150)
{
@@ -572,9 +577,9 @@ int Vox_LoadFromMemory(unsigned char* pvoxData, unsigned int voxDataSize, VoxArr
//// children chunks : m bytes
//{ child chunk 0 }
//{ child chunk 1 }
- unsigned long sizeX, sizeY, sizeZ;
+ unsigned int sizeX, sizeY, sizeZ;
sizeX = sizeY = sizeZ = 0;
- unsigned long numVoxels = 0;
+ unsigned int numVoxels = 0;
while (fileDataPtr < endfileDataPtr)
{
@@ -583,23 +588,23 @@ int Vox_LoadFromMemory(unsigned char* pvoxData, unsigned int voxDataSize, VoxArr
szChunkName[4] = 0;
fileDataPtr += 4;
- unsigned long chunkSize = *((unsigned long*)fileDataPtr);
- fileDataPtr += sizeof(unsigned long);
+ unsigned int chunkSize = *((unsigned int*)fileDataPtr);
+ fileDataPtr += sizeof(unsigned int);
//unsigned long chunkTotalChildSize = *((unsigned long*)fileDataPtr);
- fileDataPtr += sizeof(unsigned long);
+ fileDataPtr += sizeof(unsigned int);
if (strcmp(szChunkName, "SIZE") == 0)
{
//(4 bytes x 3 : x, y, z )
- sizeX = *((unsigned long*)fileDataPtr);
- fileDataPtr += sizeof(unsigned long);
+ sizeX = *((unsigned int*)fileDataPtr);
+ fileDataPtr += sizeof(unsigned int);
- sizeY = *((unsigned long*)fileDataPtr);
- fileDataPtr += sizeof(unsigned long);
+ sizeY = *((unsigned int*)fileDataPtr);
+ fileDataPtr += sizeof(unsigned int);
- sizeZ = *((unsigned long*)fileDataPtr);
- fileDataPtr += sizeof(unsigned long);
+ sizeZ = *((unsigned int*)fileDataPtr);
+ fileDataPtr += sizeof(unsigned int);
//Alloc vox array
Vox_AllocArray(pvoxarray, sizeX, sizeZ, sizeY); //Reverse Y<>Z for left to right handed system
@@ -610,8 +615,8 @@ int Vox_LoadFromMemory(unsigned char* pvoxData, unsigned int voxDataSize, VoxArr
//(numVoxels : 4 bytes )
//(each voxel: 1 byte x 4 : x, y, z, colorIndex ) x numVoxels
- numVoxels = *((unsigned long*)fileDataPtr);
- fileDataPtr += sizeof(unsigned long);
+ numVoxels = *((unsigned int*)fileDataPtr);
+ fileDataPtr += sizeof(unsigned int);
while (numVoxels > 0)
{