mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-12-10 12:11:28 +01:00
BUG/MINOR: protocol_buffer: Wrong maximum shifting.
This patch fixes a bad stop condition when decoding a protocol buffer variable integer whose maximum lenghts are 10, shifting a uint64_t value by more than 63. Thank you to Ilya for having reported this issue. Must be backported to 2.1 and 2.0.
This commit is contained in:
parent
5dfc5d5cd0
commit
876ed55d9b
@ -158,7 +158,7 @@ protobuf_varint(uint64_t *val, unsigned char *pos, size_t len)
|
|||||||
|
|
||||||
shift += 7;
|
shift += 7;
|
||||||
/* The maximum length in bytes of a 64-bit encoded value is 10. */
|
/* The maximum length in bytes of a 64-bit encoded value is 10. */
|
||||||
if (shift > 70)
|
if (shift > 63)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -194,7 +194,7 @@ protobuf_decode_varint(uint64_t *val, unsigned char **pos, size_t *len)
|
|||||||
|
|
||||||
shift += 7;
|
shift += 7;
|
||||||
/* The maximum length in bytes of a 64-bit encoded value is 10. */
|
/* The maximum length in bytes of a 64-bit encoded value is 10. */
|
||||||
if (shift > 70)
|
if (shift > 63)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,7 +227,7 @@ protobuf_skip_varint(unsigned char **pos, size_t *len, size_t vlen)
|
|||||||
|
|
||||||
shift += 7;
|
shift += 7;
|
||||||
/* The maximum length in bytes of a 64-bit encoded value is 10. */
|
/* The maximum length in bytes of a 64-bit encoded value is 10. */
|
||||||
if (shift > 70)
|
if (shift > 63)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -263,7 +263,7 @@ protobuf_varint_getlen(unsigned char *pos, size_t len)
|
|||||||
|
|
||||||
shift += 7;
|
shift += 7;
|
||||||
/* The maximum length in bytes of a 64-bit encoded value is 10. */
|
/* The maximum length in bytes of a 64-bit encoded value is 10. */
|
||||||
if (shift > 70)
|
if (shift > 63)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user