From 9fccbde10c91295a74df6363b4e08259b0d855f0 Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Sun, 2 Aug 2020 20:22:04 +0200 Subject: [PATCH] Prevent unaligned double word access on ARMv7 in put_uint64 By implementing a (UNALIGNED_OK && !UNALIGNED64_OK) codepath. --- deflate.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/deflate.h b/deflate.h index 600fca6d..ce6106cf 100644 --- a/deflate.h +++ b/deflate.h @@ -351,9 +351,14 @@ static inline void put_uint32_msb(deflate_state *s, uint32_t dw) { * IN assertion: there is enough room in pending_buf. */ static inline void put_uint64(deflate_state *s, uint64_t lld) { -#if defined(UNALIGNED_OK) +#if defined(UNALIGNED64_OK) *(uint64_t *)(&s->pending_buf[s->pending]) = lld; s->pending += 8; +#elif defined(UNALIGNED_OK) + *(uint32_t *)(&s->pending_buf[s->pending]) = lld & 0xffffffff; + s->pending += 4; + *(uint32_t *)(&s->pending_buf[s->pending]) = (lld >> 32) & 0xffffffff; + s->pending += 4; #else put_byte(s, (lld & 0xff)); put_byte(s, ((lld >> 8) & 0xff)); -- 2.47.2