libqaeda

Unnamed repository; edit this file 'description' to name the repository.
Info | Log | Files | Refs | README | LICENSE

commit 14fd772bf8b43266b6ac9c09092f94a98f44f810
parent d76bbdb931359520a32f1091d3849e3829b7dc7a
Author: lash <dev@holbrook.no>
Date:   Mon, 21 Apr 2025 19:09:11 -0600

Ensure correct endian in numeric hint in envelope

Diffstat:
Msrc/lq/envelope.c | 14+++++++++++++-
Msrc/test/test_envelope.c | 4++--
2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/lq/envelope.c b/src/lq/envelope.c @@ -97,6 +97,7 @@ int lq_envelope_serialize(LQEnvelope *env, LQResolve *resolve, char *out, size_t size_t c; int mx; int r; + int hint; char err[LQ_ERRSIZE]; char buf[LQ_BLOCKSIZE]; asn1_node item; @@ -110,8 +111,13 @@ int lq_envelope_serialize(LQEnvelope *env, LQResolve *resolve, char *out, size_t return ERR_READ; } + hint = env->hint; + r = to_endian(TO_ENDIAN_BIG, sizeof(int), &hint); + if (r) { + return asn_except(&item, ERR_BYTEORDER); + } c = sizeof(int); - r = asn1_write_value(item, "Envelope.hint", &env->hint, c); + r = asn1_write_value(item, "Envelope.hint", &hint, c); if (r != ASN1_SUCCESS) { return asn_except(&item, ERR_WRITE); } @@ -168,6 +174,7 @@ int lq_envelope_deserialize(LQEnvelope **env, LQResolve *resolve, const char *in char tmp[LQ_BLOCKSIZE]; char node_seq_name[32]; int hint; + char *p; LQCert *cert; asn1_node item; @@ -181,11 +188,16 @@ int lq_envelope_deserialize(LQEnvelope **env, LQResolve *resolve, const char *in return asn_except(&item, ERR_ENCODING); } + hint = 0; c = sizeof(int); r = asn1_read_value(item, "hint", &hint, &c); if (r != ASN1_SUCCESS) { return asn_except(&item, ERR_READ); } + hint <<= ((sizeof(int) - c) * 8); + if (is_le()) { + flip_endian(sizeof(int), (char*)(&hint)); + } c = LQ_BLOCKSIZE; r = asn1_read_value(item, "cert", tmp, &c); diff --git a/src/test/test_envelope.c b/src/test/test_envelope.c @@ -33,7 +33,7 @@ START_TEST(check_envelope) { r = lq_certificate_serialize(cert, NULL, buf, &c); ck_assert_int_eq(r, 0); - env = lq_envelope_new(cert, 42); + env = lq_envelope_new(cert, 500); ck_assert_ptr_nonnull(env); r = lq_envelope_attach(env, data, strlen(data) + 1); ck_assert_int_eq(r, 0); @@ -47,7 +47,7 @@ START_TEST(check_envelope) { r = lq_envelope_deserialize(&env, NULL, buf, c); ck_assert_int_eq(r, 0); - ck_assert_int_eq(env->hint, 42); + ck_assert_int_eq(env->hint, 500); lq_envelope_free(env); } END_TEST