commit 264498e48dc93916697a4b570f6c19fb0e221ec7
parent 79e00268cacf1610679dab0299a6990409514df6
Author: lash <dev@holbrook.no>
Date: Fri, 4 Apr 2025 20:31:42 +0100
Fix memory leak in cert sig
Diffstat:
4 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/src/cli/main.c b/src/cli/main.c
@@ -119,11 +119,11 @@ int main(int argc, char **argv) {
return 1;
}
cert = lq_certificate_new(NULL);
-// r = lq_certificate_request(cert, req, pk_alice);
-// if (r != ERR_OK) {
-// lq_ui_free();
-// return 1;
-// }
+ r = lq_certificate_request(cert, req, pk_alice);
+ if (r != ERR_OK) {
+ lq_ui_free();
+ return 1;
+ }
//
// res = lq_msg_new("foo", 4);
// if (res == NULL) {
@@ -136,9 +136,8 @@ int main(int argc, char **argv) {
// return 1;
// }
- r = lq_certificate_verify(cert, pubk_alice, NULL);
+// r = lq_certificate_verify(cert, pubk_alice, NULL);
- lq_msg_free(req);
lq_certificate_free(cert);
lq_ui_free();
diff --git a/src/crypto/gcrypt.c b/src/crypto/gcrypt.c
@@ -1093,6 +1093,9 @@ void lq_signature_free(LQSig *sig) {
if (sig->pubkey != NULL) {
lq_publickey_free(sig->pubkey);
}
+ if (sig->impl != NULL) {
+ lq_free(sig->impl);
+ }
lq_free(sig);
}
diff --git a/src/lq/cert.c b/src/lq/cert.c
@@ -294,8 +294,8 @@ int lq_certificate_deserialize(LQCert **cert, char *in, size_t in_len, LQResolve
asn1_node item;
LQCert *p;
- lq_set(&node, 0, sizeof(node));
- lq_set(&item, 0, sizeof(item));
+ lq_zero(&node, sizeof(node));
+ lq_zero(&item, sizeof(item));
r = asn1_array2tree(defs_asn1_tab, &node, err);
if (r != ASN1_SUCCESS) {
return ERR_INIT;
@@ -325,6 +325,7 @@ int lq_certificate_deserialize(LQCert **cert, char *in, size_t in_len, LQResolve
if (r != ASN1_SUCCESS) {
return ERR_READ;
}
+
r = lq_msg_deserialize(&p->request, tmp, c, resolve);
if (r != ERR_OK) {
return r;
diff --git a/src/lq/msg.c b/src/lq/msg.c
@@ -55,13 +55,14 @@ LQSig* lq_msg_sign_extra(LQMsg *msg, LQPrivKey *pk, const char *salt, const char
if (r != ERR_OK) {
return NULL;
}
+ lq_free(data);
return lq_privatekey_sign(pk, digest, LQ_DIGEST_LEN, salt);
}
void lq_msg_free(LQMsg *msg) {
//if (msg->pubkey->pk = NULL) {
if (msg->pubkey != NULL) {
- lq_free(msg->pubkey);
+ lq_publickey_free(msg->pubkey);
}
lq_free(msg->data);
lq_free(msg);