diff options
author | Werner Koch <wk@gnupg.org> | 2020-10-26 12:49:21 +0100 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2020-10-26 12:50:30 +0100 |
commit | 0f780b1aebb1b1bde219401735a1c24c1f0a7978 (patch) | |
tree | 1a135a0114f49daee6d2c5c3cc6234173a781372 | |
parent | cf4b8a27c37db1ac50bd8d1aa6ad2b7ad3aeaa81 (diff) | |
download | gnupg-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.c | 1 | ||||
-rw-r--r-- | 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: |