mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-07 15:47:01 +02:00
[BUG] stick-table: use the private buffer when padding strings
Commit 035da6d1b0
was incorrect as it
could modify a live buffer. We must first ensure that we're on the
private buffer or perform a copy before modifying the data.
This commit is contained in:
parent
5109196275
commit
f18b5f21ba
@ -561,10 +561,22 @@ struct stktable_key *stktable_fetch_key(struct stktable *t, struct proxy *px, st
|
||||
return NULL;
|
||||
|
||||
if (t->type == STKTABLE_TYPE_STRING) {
|
||||
/* The string MUST be terminated by a '\0' after the key_len bytes */
|
||||
/* The string MUST be terminated by a '\0' after the key_len bytes. The problem
|
||||
* is that we cannot modify the input data if it comes from the original buffer,
|
||||
* so we copy it to a private buffer if required.
|
||||
*/
|
||||
if (static_table_key.key_len > t->key_size - 1)
|
||||
static_table_key.key_len = t->key_size - 1;
|
||||
((char *)static_table_key.key)[static_table_key.key_len] = 0;
|
||||
|
||||
if (((char *)static_table_key.key)[static_table_key.key_len] != 0) {
|
||||
if ((char *)static_table_key.key < (char *)&static_table_key.data ||
|
||||
(char *)static_table_key.key > (char *)&static_table_key.data + sizeof(static_table_key.data)) {
|
||||
/* key definitly not part of the static_table_key private data buffer */
|
||||
memcpy(static_table_key.data.buf, static_table_key.key, static_table_key.key_len);
|
||||
static_table_key.key = static_table_key.data.buf;
|
||||
}
|
||||
((char *)static_table_key.key)[static_table_key.key_len] = 0;
|
||||
}
|
||||
}
|
||||
else if (static_table_key.key_len < t->key_size) {
|
||||
/* need padding with null */
|
||||
|
Loading…
Reference in New Issue
Block a user