load64() counted down from 7..0, but the decrement turned 0 into 255.
This means the loop would never terminate on Big Endian systems.
Just use signed char integers since we're only dealing with values from 0..7 anyway.
Closes https://bugs.php.net/bug.php?id=73282
#ifdef WORDS_BIGENDIAN
static inline uint64_t load64(const unsigned char* x) {
- unsigned char i;
+ char i;
uint64_t ret = 0;
for (i = 7; i >= 0; --i) {
ret <<= 8;
return ret;
}
static inline void store64(unsigned char* x, uint64_t val) {
- unsigned char i;
+ char i;
for (i = 0; i < 8; ++i) {
x[i] = val & 0xFF;
val >>= 8;
}
}
static inline void xor64(unsigned char* x, uint64_t val) {
- unsigned char i;
+ char i;
for (i = 0; i < 8; ++i) {
x[i] ^= val & 0xFF;
val >>= 8;