scd: Handle error correctly.
authorNIIBE Yutaka <gniibe@fsij.org>
Mon, 28 Sep 2015 04:41:59 +0000 (13:41 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Tue, 29 Nov 2016 07:55:49 +0000 (16:55 +0900)
* scd/apdu.c (apdu_connect): Initialize variables and check an error
of apdu_get_status_internal.

--
Backport from master commit: 6bb7206e357acfd7276a8f1334c0f0c9cc6ed100

scd/apdu.c

index 30e5ef9..00351c8 100644 (file)
@@ -3216,8 +3216,8 @@ apdu_enum_reader (int slot, int *used)
 int
 apdu_connect (int slot)
 {
-  int sw;
-  unsigned int status;
+  int sw = 0;
+  unsigned int status = 0;
 
   if (slot < 0 || slot >= MAX_READER || !reader_table[slot].used )
     return SW_HOST_NO_DRIVER;
@@ -3234,15 +3234,15 @@ apdu_connect (int slot)
           unlock_slot (slot);
         }
     }
-  else
-    sw = 0;
 
   /* We need to call apdu_get_status_internal, so that the last-status
      machinery gets setup properly even if a card is inserted while
      scdaemon is fired up and apdu_get_status has not yet been called.
      Without that we would force a reset of the card with the next
      call to apdu_get_status.  */
-  apdu_get_status_internal (slot, 1, 1, &status, NULL);
+  if (!sw)
+    sw = apdu_get_status_internal (slot, 1, 1, &status, NULL);
+
   if (sw)
     ;
   else if (!(status & APDU_CARD_PRESENT))