scd: call update_card_removed only when detecting removal.
authorNIIBE Yutaka <gniibe@fsij.org>
Mon, 25 Mar 2013 23:43:15 +0000 (08:43 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Mon, 25 Mar 2013 23:57:22 +0000 (08:57 +0900)
* scd/command.c (update_reader_status_file): Add condition
vr->status == 0.

--

To reproduce the bug: (1) insert card,
  (2) run "gpg2 --card-status",
  (3) remove card, (4) invoke "gpg2 --card-edit",
  (5) invoke some command like "verify"
The last step fails (but with no error message to user).

scd/command.c

index 6267bb0..d5cc32c 100644 (file)
@@ -2365,10 +2365,8 @@ update_reader_status_file (int set_card_removed_flag)
             xfree (homestr);
           }
 
-          /* Set the card removed flag for all current sessions.  We
-             will set this on any card change because a reset or
-             SERIALNO request must be done in any case.  */
-          if (vr->any && set_card_removed_flag)
+          /* Set the card removed flag for all current sessions.  */
+          if (vr->any && vr->status == 0 && set_card_removed_flag)
             update_card_removed (idx, 1);
 
           vr->any = 1;