From e3b267112f75a5b97f945626315392a88732b0b5 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 21:07:33 +0200 Subject: [PATCH] coverity 226372 - leak --- client/emv/tlv.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/client/emv/tlv.c b/client/emv/tlv.c index 6e840f928..49a4038b5 100644 --- a/client/emv/tlv.c +++ b/client/emv/tlv.c @@ -367,12 +367,14 @@ void tlvdb_change_or_add_node_ex(struct tlvdb *tlvdb, tlv_tag_t tag, size_t len, // replace tlv element struct tlvdb *tnewelm = tlvdb_fixed(tag, len, value); + bool tnewelm_linked = false; tnewelm->next = telm->next; tnewelm->parent = telm->parent; // if telm stayed first in children chain if (telm->parent && telm->parent->children == telm) { telm->parent->children = tnewelm; + tnewelm_linked = true; } // if telm have previous element @@ -387,6 +389,7 @@ void tlvdb_change_or_add_node_ex(struct tlvdb *tlvdb, tlv_tag_t tag, size_t len, for (; celm; celm = celm->next) { if (celm->next == telm) { celm->next = tnewelm; + tnewelm_linked = true; break; } } @@ -396,8 +399,13 @@ void tlvdb_change_or_add_node_ex(struct tlvdb *tlvdb, tlv_tag_t tag, size_t len, telm->next = NULL; tlvdb_free(telm); - if (tlvdb_elm) + if (tlvdb_elm) { *tlvdb_elm = tnewelm; + tnewelm_linked = true; + } + if (! tnewelm_linked) { + tlvdb_free(tnewelm); + } } return;