From c2df265de7ac626d6cc92089c4bade4628ac3df5 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Thu, 7 May 2026 11:56:08 +0500 Subject: [PATCH] engine: operate on a local copy of dspriteframe_t to avoid unaligned access on ARMv7 --- engine/common/mod_sprite.c | 17 ++++++++++------- engine/common/mod_studio.c | 3 --- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/engine/common/mod_sprite.c b/engine/common/mod_sprite.c index bd205a94..66040fda 100644 --- a/engine/common/mod_sprite.c +++ b/engine/common/mod_sprite.c @@ -51,20 +51,23 @@ le_struct_end(); static byte *Mod_SwapSpriteFrame( byte *p, byte *end, int bytes ) { - dspriteframe_t *frame; + dspriteframe_t frame; - if( p + sizeof( *frame ) > end ) + if( p + sizeof( frame ) > end ) return NULL; - frame = (dspriteframe_t *)p; - le_struct_swap( dspriteframe_swap, frame ); - p += sizeof( *frame ); + memcpy( &frame, p, sizeof( frame )); + le_struct_swap( dspriteframe_swap, &frame ); +#if XASH_BIG_ENDIAN + memcpy( p, &frame, sizeof( frame )); +#endif + p += sizeof( frame ); // skip pixel data - if( p + frame->width * frame->height * bytes > end ) + if( p + frame.width * frame.height * bytes > end ) return NULL; - p += frame->width * frame->height * bytes; + p += frame.width * frame.height * bytes; return p; } diff --git a/engine/common/mod_studio.c b/engine/common/mod_studio.c index 3c3d9d3f..e848ee09 100644 --- a/engine/common/mod_studio.c +++ b/engine/common/mod_studio.c @@ -1009,9 +1009,6 @@ static qboolean Mod_SwapStudioModel( const char *name, void *buffer, size_t buff if( phdr->ident != IDSTUDIOHEADER || phdr->version != STUDIO_VERSION ) return false; - - - #if XASH_BIG_ENDIAN if( phdr->studiohdr2index > 0 && phdr->studiohdr2index < phdr->length ) {