From 28c63c15f572a1afeabfdada6a0a4f4d023d05fc Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 23 Oct 2019 06:21:05 +0200 Subject: [PATCH] BUG/MINOR: stick-table: fix an incorrect 32 to 64 bit key conversion As reported in issue #331, the code used to cast a 32-bit to a 64-bit stick-table key is wrong. It only copies the 32 lower bits in place on little endian machines or overwrites the 32 higher ones on big endian machines. It ought to simply remove the wrong cast dereference. This bug was introduced when changing stick table keys to samples in 1.6-dev4 by commit bc8c404449 ("MAJOR: stick-tables: use sample types in place of dedicated types") so it the fix must be backported as far as 1.6. --- src/stick_table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stick_table.c b/src/stick_table.c index 86ea3ce..c9f3e06 100644 --- a/src/stick_table.c +++ b/src/stick_table.c @@ -927,7 +927,7 @@ struct stktable_key *smp_to_stkey(struct sample *smp, struct stktable *t) /* The stick table require a 32bit unsigned int, "sint" is a * signed 64 it, so we can convert it inplace. */ - *(unsigned int *)&smp->data.u.sint = (unsigned int)smp->data.u.sint; + smp->data.u.sint = (unsigned int)smp->data.u.sint; static_table_key.key = &smp->data.u.sint; static_table_key.key_len = 4; break; -- 1.7.10.4