aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2020-10-26 12:49:21 +0100
committerWerner Koch <wk@gnupg.org>2020-10-26 12:50:30 +0100
commit0f780b1aebb1b1bde219401735a1c24c1f0a7978 (patch)
tree1a135a0114f49daee6d2c5c3cc6234173a781372
parentcf4b8a27c37db1ac50bd8d1aa6ad2b7ad3aeaa81 (diff)
downloadgnupg-0f780b1aebb1b1bde219401735a1c24c1f0a7978.tar.gz
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.
-rw-r--r--g10/call-agent.c1
-rw-r--r--g10/card-util.c10
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: