mirror of
https://github.com/haproxy/haproxy.git
synced 2026-06-08 16:23:24 -04:00
BUG/MINOR: mux-spop: Fix possible off-by-one OOB read in spop_get_varint()
In spop_get_varint(), -1 is returned if there is not enough data in the buffer to decode the variable integer. However a strict comparison agasint b_data() was performed, which is wrong. A failure must be reported if the index is greater or equal to b_data(). This patch must be backported as far as 3.2.
This commit is contained in:
parent
b8543c54d4
commit
4a540a4fb7
1 changed files with 2 additions and 2 deletions
|
|
@ -1033,7 +1033,7 @@ static __maybe_unused int spop_get_varint(const struct buffer *b, int o, uint64_
|
|||
size_t idx = o;
|
||||
int r;
|
||||
|
||||
if (idx > b_data(b))
|
||||
if (idx >= b_data(b))
|
||||
return -1;
|
||||
|
||||
p = (unsigned char *)b_peek(b, idx++);
|
||||
|
|
@ -1043,7 +1043,7 @@ static __maybe_unused int spop_get_varint(const struct buffer *b, int o, uint64_
|
|||
|
||||
r = 4;
|
||||
do {
|
||||
if (idx > b_data(b))
|
||||
if (idx >= b_data(b))
|
||||
return -1;
|
||||
p = (unsigned char *)b_peek(b, idx++);
|
||||
*i += (uint64_t)*p << r;
|
||||
|
|
|
|||
Loading…
Reference in a new issue