Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6963006

smartcardio is not mt safe - javax.smartcardio.CardException: wait mismatch

    XMLWordPrintable

Details

    Backports

      Description

        When trying to check from a thread whether a smartcard has been already
        removed while a read/write operation is taking place in another thread
        the following exception occurs:

           javax.smartcardio.CardException: wait mismatch
              at sun.security.smartcardio.TerminalImpl.waitForCard(TerminalImpl.java:103)
              at sun.security.smartcardio.TerminalImpl.waitForCardAbsent(TerminalImpl.java:120)
              at TerminalImplExample.run(TerminalImplExample.java:116)

        This is an exception which should never happen, please see the source code
        of waitForCard() in
        /ws/j2se/src/share/classes/sun/security/smartcardio/TerminalImpl.java

                    // should never happen
                    if (wantPresent != present) {
                        throw new CardException("wait mismatch");

        Since it does happen, I'd consider this a bug. A test case is available.
        See the attached zip file TerminalImplExample.zip. It requires a card reader.

        The reason why the exception occured is that waitForCard() is not prepared to
        handle other card state changes than SCARD_STATE_PRESENT = 0x0020;
        With the test case we can see that for example 0x0122 occurs, which means
        CHANGED PRESENT INUSE.

        Attachments

          Issue Links

            Activity

              People

                miroslawzn Miroslaw Niemiec (Inactive)
                tviessma Thomas Viessmann (Inactive)
                Votes:
                0 Vote for this issue
                Watchers:
                1 Start watching this issue

                Dates

                  Created:
                  Updated:
                  Resolved:
                  Imported:
                  Indexed: