imagelib: fix unaligned access

This commit is contained in:
nillerusr 2020-02-17 23:25:39 +03:00
parent 68472f90eb
commit 4021d7bf5c
1 changed files with 9 additions and 7 deletions

View File

@ -199,8 +199,9 @@ Image_LoadSPR
*/
qboolean Image_LoadSPR( const char *name, const byte *buffer, fs_offset_t filesize )
{
dspriteframe_t *pin; // identical for q1\hl sprites
dspriteframe_t pin; // identical for q1\hl sprites
qboolean truecolor = false;
byte *fin;
if( image.hint == IL_HINT_HL )
{
@ -217,9 +218,9 @@ qboolean Image_LoadSPR( const char *name, const byte *buffer, fs_offset_t filesi
return false;
}
pin = (dspriteframe_t *)buffer;
image.width = pin->width;
image.height = pin->height;
memcpy( &pin, buffer, sizeof(dspriteframe_t) );
image.width = pin.width;
image.height = pin.height;
if( filesize < image.width * image.height )
return false;
@ -243,18 +244,19 @@ qboolean Image_LoadSPR( const char *name, const byte *buffer, fs_offset_t filesi
SetBits( image.flags, IMAGE_HAS_ALPHA );
break;
}
fin = (byte *)(buffer + sizeof(dspriteframe_t));
if( truecolor )
{
// spr32 support
image.size = image.width * image.height * 4;
image.rgba = Mem_Malloc( host.imagepool, image.size );
memcpy( image.rgba, (byte *)(pin + 1), image.size );
memcpy( image.rgba, fin, image.size );
SetBits( image.flags, IMAGE_HAS_COLOR ); // Color. True Color!
return true;
}
return Image_AddIndexedImageToPack( (byte *)(pin + 1), image.width, image.height );
return Image_AddIndexedImageToPack( fin, image.width, image.height );
}
/*