From 0f780b1aebb1b1bde219401735a1c24c1f0a7978 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 26 Oct 2020 12:49:21 +0100 Subject: [PATCH] g10: Make call to agent_scd_serialno more robust. * g10/call-agent.c (agent_scd_serialno): Make sure that NULL is stored on error at r_serialno. * g10/card-util.c (card_status): Simplify freeing of seriaono. (factory_reset): Ditto. -- This pattern is what we use with other functions returning an allocated string and thus less surprising. --- g10/call-agent.c | 1 + g10/card-util.c | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/g10/call-agent.c b/g10/call-agent.c index 1fa77e7be..c4d146392 100644 --- a/g10/call-agent.c +++ b/g10/call-agent.c @@ -1381,6 +1381,7 @@ agent_scd_serialno (char **r_serialno, const char *demand) char *serialno = NULL; char line[ASSUAN_LINELENGTH]; + *r_serialno = NULL; err = start_agent (NULL, (1 | FLAG_FOR_CARD_SUPPRESS_ERRORS)); if (err) return err; diff --git a/g10/card-util.c b/g10/card-util.c index 168427552..d43081588 100644 --- a/g10/card-util.c +++ b/g10/card-util.c @@ -688,7 +688,8 @@ card_status (ctrl_t ctrl, estream_t fp, const char *serialno) { int err; strlist_t card_list, sl; - char *serialno0, *serialno1; + char *serialno0 = NULL; + char *serialno1 = NULL; int all_cards = 0; int any_card = 0; @@ -733,6 +734,7 @@ card_status (ctrl_t ctrl, estream_t fp, const char *serialno) current_card_status (ctrl, fp, NULL, 0); xfree (serialno1); + serialno1 = NULL; if (!all_cards) goto leave; @@ -740,11 +742,10 @@ card_status (ctrl_t ctrl, estream_t fp, const char *serialno) /* Select the original card again. */ err = agent_scd_serialno (&serialno1, serialno0); - if (!err) - xfree (serialno1); leave: xfree (serialno0); + xfree (serialno1); free_strlist (card_list); } @@ -2000,8 +2001,7 @@ factory_reset (void) char *serialno0; err = agent_scd_serialno (&serialno0, NULL); - if (!err) - xfree (serialno0); + xfree (serialno0); } leave: