aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2019-09-11 02:05:03 +0000
committerNIIBE Yutaka <[email protected]>2019-09-11 02:05:03 +0000
commit92be4e87eec984a3f3737339c311761d2650c55a (patch)
tree8f3196d013696aa8336b3f0cfa103e714277111d
parentscd,pcsc: Fix for initializing PC/SC. (diff)
downloadgnupg-92be4e87eec984a3f3737339c311761d2650c55a.tar.gz
gnupg-92be4e87eec984a3f3737339c311761d2650c55a.zip
scd,pcsc: Fix examining the list of readers.
* scd/apdu.c (apdu_dev_list_start): Traverse the string+NUL carefully. Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r--scd/apdu.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/scd/apdu.c b/scd/apdu.c
index 958b47e1a..af747c07d 100644
--- a/scd/apdu.c
+++ b/scd/apdu.c
@@ -1998,17 +1998,25 @@ apdu_dev_list_start (const char *portstr, struct dev_list **l_p)
while (nreader)
{
- if (!*p && !p[1])
+ size_t n;
+
+ if (!*p)
break;
- log_info ("detected reader '%s'\n", p);
- if (nreader < (strlen (p)+1))
+
+ for (n = 0; n < nreader; n++)
+ if (!p[n])
+ break;
+
+ if (n >= nreader)
{
log_error ("invalid response from pcsc_list_readers\n");
break;
}
+
+ log_info ("detected reader '%s'\n", p);
pcsc.rdrname[dl->idx_max] = p;
- nreader -= strlen (p)+1;
- p += strlen (p) + 1;
+ nreader -= n + 1;
+ p += n + 1;
dl->idx_max++;
if (dl->idx_max >= MAX_READER)
{