libmicrohttpd

HTTP/1.x server C library (MHD 1.x, stable)
Log | Files | Refs | Submodules | README | LICENSE

commit f473462465f0a4044fb8f37e1064dc08fb45fc17
parent 8457dfc7b6a643802accba03c09a7602922a63f1
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date:   Sun,  1 May 2022 16:44:53 +0300

check_nonce_nc(): fixed missing set of the bit for the old 'nc' value

When 'nc' values are increased sequentially, the bit for the old 'nc'
value was not set.

Diffstat:
Msrc/microhttpd/digestauth.c | 12++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/microhttpd/digestauth.c b/src/microhttpd/digestauth.c @@ -634,8 +634,16 @@ check_nonce_nc (struct MHD_Connection *connection, else { /* 'nc' is larger, shift bitmask and bump limit */ - if (64 > nc - nn->nc) - nn->nmask <<= (nc - nn->nc); /* small jump, less than mask width */ + const uint64_t jump_size = nc - nn->nc; + if (64 > jump_size) + { + /* small jump, less than mask width */ + nn->nmask <<= jump_size; + /* Set bit for the old 'nc' value */ + nn->nmask |= (UINT64_C (1) << (jump_size - 1)); + } + else if (64 == jump_size) + nn->nmask = (UINT64_C (1) << 63); else nn->nmask = 0; /* big jump, unset all bits in the mask */ nn->nc = nc;