summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhil Sutter <phil@nwl.cc>2021-03-10 16:56:11 +0100
committerPhil Sutter <phil@nwl.cc>2021-11-30 14:57:46 +0100
commita4cd80fc44d6289239a6c89b20f9eb89680ce958 (patch)
tree04f872ee26f544ab2b3ed0147b19d7b14a5cd40e
parent00c35de933e95385acbe7fdc8aaab5a697f734a5 (diff)
ct: Fix ct label value parser
Size of array to export the bit value into was eight times too large, so on Big Endian the data written into the data reg was always zero. Fixes: 2fcce8b0677b3 ("ct: connlabel matching support") Signed-off-by: Phil Sutter <phil@nwl.cc>
-rw-r--r--src/ct.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/ct.c b/src/ct.c
index 2218ecc7..60491571 100644
--- a/src/ct.c
+++ b/src/ct.c
@@ -176,7 +176,7 @@ static struct error_record *ct_label_type_parse(struct parse_ctx *ctx,
{
const struct symbolic_constant *s;
const struct datatype *dtype;
- uint8_t data[CT_LABEL_BIT_SIZE];
+ uint8_t data[CT_LABEL_BIT_SIZE / BITS_PER_BYTE];
uint64_t bit;
mpz_t value;
@@ -211,8 +211,7 @@ static struct error_record *ct_label_type_parse(struct parse_ctx *ctx,
mpz_export_data(data, value, BYTEORDER_HOST_ENDIAN, sizeof(data));
*res = constant_expr_alloc(&sym->location, dtype,
- dtype->byteorder, sizeof(data),
- data);
+ dtype->byteorder, CT_LABEL_BIT_SIZE, data);
mpz_clear(value);
return NULL;
}