From dc660a03e8a5aa3ab29b4d05ce0ce2fd71ad4e65 Mon Sep 17 00:00:00 2001 From: Stefan Knoblich Date: Wed, 21 Apr 2021 15:59:26 +0200 Subject: [PATCH] Limit the number of connection attempts to avoid endless looping Non-windows platforms, where the service is not auto-activated, will endless loop until the smartcard service is started. Limit the number of attempts to avoid this. Signed-off-by: Stefan Knoblich --- src/pcsclite.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pcsclite.cpp b/src/pcsclite.cpp index dd66881..8332f6e 100644 --- a/src/pcsclite.cpp +++ b/src/pcsclite.cpp @@ -67,7 +67,7 @@ PCSCLite::PCSCLite(): m_card_context(0), postServiceCheck: #endif // _WIN32 - LONG result; + LONG result, attempt = 0; // TODO: consider removing this do-while Windows workaround that should not be needed anymore do { // TODO: make dwScope (now hard-coded to SCARD_SCOPE_SYSTEM) customisable @@ -75,7 +75,7 @@ postServiceCheck: NULL, NULL, &m_card_context); - } while(result == SCARD_E_NO_SERVICE || result == SCARD_E_SERVICE_STOPPED); + } while((result == SCARD_E_NO_SERVICE || result == SCARD_E_SERVICE_STOPPED) && ++attempt <= 10); if (result != SCARD_S_SUCCESS) { Nan::ThrowError(error_msg("SCardEstablishContext", result).c_str()); } else {