scd PC/SC status fix

NIIBE Yutaka gniibe at fsij.org
Tue Mar 26 04:54:40 CET 2013


I applied following patch to both branches.

I think that this is long standing bug.  It is revealed by the change of
update_reader_status_file.

Built and tested.

    * scd/apdu.c (pcsc_get_status_direct): Check PCSC_STATE_MUTE only when
    PCSC_STATE_PRESENT.
    
    * scd/pcsc-wrapper.c (handle_status): Ditto.

diff --git a/scd/apdu.c b/scd/apdu.c
index d8f7c5f..4f40a69 100644
--- a/scd/apdu.c
+++ b/scd/apdu.c
@@ -914,9 +914,11 @@ pcsc_get_status_direct (int slot, unsigned int *status)
 
   *status = 0;
   if ( (rdrstates[0].event_state & PCSC_STATE_PRESENT) )
-    *status |= APDU_CARD_PRESENT;
-  if ( !(rdrstates[0].event_state & PCSC_STATE_MUTE) )
-    *status |= APDU_CARD_ACTIVE;
+    {
+      *status |= APDU_CARD_PRESENT;
+      if ( !(rdrstates[0].event_state & PCSC_STATE_MUTE) )
+	*status |= APDU_CARD_ACTIVE;
+    }
 #ifndef HAVE_W32_SYSTEM
   /* We indicate a useful card if it is not in use by another
      application.  This is because we only use exclusive access
diff --git a/scd/pcsc-wrapper.c b/scd/pcsc-wrapper.c
index 04d08a1..7d9415a 100644
--- a/scd/pcsc-wrapper.c
+++ b/scd/pcsc-wrapper.c
@@ -602,9 +602,11 @@ handle_status (unsigned char *argbuf, size_t arglen)
   if ( !(rdrstates[0].event_state & PCSC_STATE_UNKNOWN) )
     {
       if ( (rdrstates[0].event_state & PCSC_STATE_PRESENT) )
-        status |= 2;
-      if ( !(rdrstates[0].event_state & PCSC_STATE_MUTE) )
-        status |= 4;
+	{
+	  status |= 2;
+	  if ( !(rdrstates[0].event_state & PCSC_STATE_MUTE) )
+	    status |= 4;
+	}
       /* We indicate a useful card if it is not in use by another
          application.  This is because we only use exclusive access
          mode.  */
-- 



More information about the Gnupg-devel mailing list