diff options
author | Sara Golemon <pollita@php.net> | 2016-10-11 20:43:02 -0700 |
---|---|---|
committer | Sara Golemon <pollita@php.net> | 2016-10-11 20:43:02 -0700 |
commit | b041bebb88db17a5fbd72c40047aaca944f9e392 (patch) | |
tree | 8ca0388417e189388d52127763afc3fda449cf0a /ext/hash | |
parent | 6ddfce116b55ec1add4b6dd05006a979bb9b873a (diff) | |
download | php-git-b041bebb88db17a5fbd72c40047aaca944f9e392.tar.gz |
Change Big Endian backup implementations to use signed indexes
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
Diffstat (limited to 'ext/hash')
-rw-r--r-- | ext/hash/hash_sha3.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/ext/hash/hash_sha3.c b/ext/hash/hash_sha3.c index 8f18fa1c27..b03c1f9453 100644 --- a/ext/hash/hash_sha3.c +++ b/ext/hash/hash_sha3.c @@ -38,7 +38,7 @@ static inline unsigned char idx(unsigned char x, unsigned char y) { #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; @@ -47,14 +47,14 @@ static inline uint64_t load64(const unsigned char* x) { 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; |