From: Eric Biggers Date: Thu, 20 Nov 2014 03:43:21 +0000 (-0600) Subject: sha1.c: Annotate potential unaligned memory accesses in sha1_final() X-Git-Tag: v1.7.4~51 X-Git-Url: https://wimlib.net/git/?p=wimlib;a=commitdiff_plain;h=8933f2145c15bb380f64998c11a05f67e3de83fb sha1.c: Annotate potential unaligned memory accesses in sha1_final() --- diff --git a/include/wimlib/unaligned.h b/include/wimlib/unaligned.h index 9d708065..7c2ade22 100644 --- a/include/wimlib/unaligned.h +++ b/include/wimlib/unaligned.h @@ -34,6 +34,7 @@ store_##type##_unaligned(type val, void *p) \ DEFINE_UNALIGNED_TYPE(le16); DEFINE_UNALIGNED_TYPE(le32); DEFINE_UNALIGNED_TYPE(le64); +DEFINE_UNALIGNED_TYPE(be32); DEFINE_UNALIGNED_TYPE(size_t); #endif /* _WIMLIB_UNALIGNED_H */ diff --git a/src/sha1.c b/src/sha1.c index 9ed26fd1..1b2abb2f 100644 --- a/src/sha1.c +++ b/src/sha1.c @@ -18,6 +18,7 @@ #include "wimlib/endianness.h" #include "wimlib/sha1.h" +#include "wimlib/unaligned.h" /* Dummy SHA-1 message digest of all 0's. This is used in the WIM format to * mean "SHA-1 not specified". */ @@ -203,13 +204,12 @@ sha1_final(u8 md[20], SHA_CTX *ctx) * final length is a multiple of the block size. */ static const u8 padding[64] = {0x80, }; be64 finalcount = cpu_to_be64(ctx->bytecount << 3); - be32 *out = (be32 *)md; sha1_update(ctx, padding, 64 - ((ctx->bytecount + 8) & 63)); sha1_update(ctx, &finalcount, 8); for (int i = 0; i < 5; i++) - out[i] = cpu_to_be32(ctx->state[i]); + store_be32_unaligned(cpu_to_be32(ctx->state[i]), &md[i * 4]); } /* Calculate the SHA-1 message digest of the specified buffer.