Browse Source

Merge pull request #127 from nillerusr/custom

imagelib: fix unaligned access
pull/2/head
mittorn 5 years ago committed by GitHub
parent
commit
3e7351cb33
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 16
      engine/common/imagelib/img_wad.c

16
engine/common/imagelib/img_wad.c

@ -199,8 +199,9 @@ Image_LoadSPR
*/ */
qboolean Image_LoadSPR( const char *name, const byte *buffer, fs_offset_t filesize ) 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; qboolean truecolor = false;
byte *fin;
if( image.hint == IL_HINT_HL ) 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; return false;
} }
pin = (dspriteframe_t *)buffer; memcpy( &pin, buffer, sizeof(dspriteframe_t) );
image.width = pin->width; image.width = pin.width;
image.height = pin->height; image.height = pin.height;
if( filesize < image.width * image.height ) if( filesize < image.width * image.height )
return false; 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 ); SetBits( image.flags, IMAGE_HAS_ALPHA );
break; break;
} }
fin = (byte *)(buffer + sizeof(dspriteframe_t));
if( truecolor ) if( truecolor )
{ {
// spr32 support // spr32 support
image.size = image.width * image.height * 4; image.size = image.width * image.height * 4;
image.rgba = Mem_Malloc( host.imagepool, image.size ); 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! SetBits( image.flags, IMAGE_HAS_COLOR ); // Color. True Color!
return true; return true;
} }
return Image_AddIndexedImageToPack( fin, image.width, image.height );
return Image_AddIndexedImageToPack( (byte *)(pin + 1), image.width, image.height );
} }
/* /*

Loading…
Cancel
Save