diff options
author | Phil Sutter <phil@nwl.cc> | 2021-03-10 11:45:47 +0100 |
---|---|---|
committer | Phil Sutter <phil@nwl.cc> | 2021-11-30 14:57:46 +0100 |
commit | 4e1abfc552170d6db5c511634a29918e64c1b51b (patch) | |
tree | c33900e470e6461ea300c99948255d47b7ef852e /src/meta.c | |
parent | 94e4e77d4343dff02ecd6079f7de34279510a5d9 (diff) |
meta: Fix hour_type size
In kernel as well as when parsing, hour_type is assumed to be 32bits.
Having the struct datatype field set to 64bits breaks Big Endian and so
does passing a 64bit value and 32 as length to constant_expr_alloc() as
it makes it import the upper 32bits. Fix this by turning 'result' into a
uint32_t and introduce a temporary uint64_t just for the call to
time_parse() which expects that.
Fixes: f8f32deda31df ("meta: Introduce new conditions 'time', 'day' and 'hour'")
Signed-off-by: Phil Sutter <phil@nwl.cc>
Diffstat (limited to 'src/meta.c')
-rw-r--r-- | src/meta.c | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -516,7 +516,8 @@ static struct error_record *hour_type_parse(struct parse_ctx *ctx, { struct error_record *er; struct tm tm, *cur_tm; - uint64_t result = 0; + uint32_t result; + uint64_t tmp; char *endptr; time_t ts; @@ -544,8 +545,8 @@ static struct error_record *hour_type_parse(struct parse_ctx *ctx, if (endptr && *endptr) return error(&sym->location, "Can't parse trailing input: \"%s\"\n", endptr); - if ((er = time_parse(&sym->location, sym->identifier, &result)) == NULL) { - result /= 1000; + if ((er = time_parse(&sym->location, sym->identifier, &tmp)) == NULL) { + result = tmp / 1000; goto convert; } @@ -599,7 +600,7 @@ const struct datatype hour_type = { .name = "hour", .desc = "Hour of day of packet reception", .byteorder = BYTEORDER_HOST_ENDIAN, - .size = sizeof(uint64_t) * BITS_PER_BYTE, + .size = sizeof(uint32_t) * BITS_PER_BYTE, .basetype = &integer_type, .print = hour_type_print, .parse = hour_type_parse, |