Loading changes/bug15436 0 → 100644 +4 −0 Original line number Diff line number Diff line o Minor bugfixes (portability): - Use the correct datatype in the SipHash-2-4 function to prevent compilers from assuming any sort of alignment. Fixes bug 15436; bugfix on 0.2.5.3-alpha. src/ext/csiphash.c +13 −3 Original line number Diff line number Diff line Loading @@ -100,7 +100,15 @@ uint64_t siphash24(const void *src, unsigned long src_sz, const struct sipkey *k uint64_t k0 = key->k0; uint64_t k1 = key->k1; uint64_t b = (uint64_t)src_sz << 56; #ifdef UNALIGNED_OK const uint64_t *in = (uint64_t*)src; #else /* On platforms where alignment matters, if 'in' is a pointer to a * datatype that must be aligned, the compiler is allowed to * generate code that assumes that it is aligned as such. */ const uint8_t *in = (uint8_t *)src; #endif uint64_t t; uint8_t *pt, *m; Loading @@ -113,12 +121,14 @@ uint64_t siphash24(const void *src, unsigned long src_sz, const struct sipkey *k while (src_sz >= 8) { #ifdef UNALIGNED_OK uint64_t mi = _le64toh(*in); in += 1; #else uint64_t mi; memcpy(&mi, in, 8); mi = _le64toh(mi); in += 8; #endif in += 1; src_sz -= 8; src_sz -= 8; v3 ^= mi; DOUBLE_ROUND(v0,v1,v2,v3); v0 ^= mi; Loading Loading
changes/bug15436 0 → 100644 +4 −0 Original line number Diff line number Diff line o Minor bugfixes (portability): - Use the correct datatype in the SipHash-2-4 function to prevent compilers from assuming any sort of alignment. Fixes bug 15436; bugfix on 0.2.5.3-alpha.
src/ext/csiphash.c +13 −3 Original line number Diff line number Diff line Loading @@ -100,7 +100,15 @@ uint64_t siphash24(const void *src, unsigned long src_sz, const struct sipkey *k uint64_t k0 = key->k0; uint64_t k1 = key->k1; uint64_t b = (uint64_t)src_sz << 56; #ifdef UNALIGNED_OK const uint64_t *in = (uint64_t*)src; #else /* On platforms where alignment matters, if 'in' is a pointer to a * datatype that must be aligned, the compiler is allowed to * generate code that assumes that it is aligned as such. */ const uint8_t *in = (uint8_t *)src; #endif uint64_t t; uint8_t *pt, *m; Loading @@ -113,12 +121,14 @@ uint64_t siphash24(const void *src, unsigned long src_sz, const struct sipkey *k while (src_sz >= 8) { #ifdef UNALIGNED_OK uint64_t mi = _le64toh(*in); in += 1; #else uint64_t mi; memcpy(&mi, in, 8); mi = _le64toh(mi); in += 8; #endif in += 1; src_sz -= 8; src_sz -= 8; v3 ^= mi; DOUBLE_ROUND(v0,v1,v2,v3); v0 ^= mi; Loading