From 7ec1b56e42985b3784455cedbed0a7c5fb6d1d72 Mon Sep 17 00:00:00 2001 From: Aaron Small Date: Thu, 22 Dec 2011 14:23:08 -0500 Subject: [PATCH] Fix crash when connecting using smartcard --- channels/rdpdr/smartcard/scard_operations.c | 36 +++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/channels/rdpdr/smartcard/scard_operations.c b/channels/rdpdr/smartcard/scard_operations.c index 47e9f8c96..26c7bc9d4 100644 --- a/channels/rdpdr/smartcard/scard_operations.c +++ b/channels/rdpdr/smartcard/scard_operations.c @@ -1077,16 +1077,52 @@ static uint32 handle_GetAttrib(IRP* irp) #endif rv = SCardGetAttrib(hCard, dwAttrId, attrLen == 0 ? NULL : (uint8*) &pbAttr, &attrLen); + if( rv != SCARD_S_SUCCESS ) { +#ifdef SCARD_AUTOALLOCATE + if(dwAttrLen == 0) + { + attrLen = 0; + } + else + { + attrLen = SCARD_AUTOALLOCATE; + } +#endif + } if(dwAttrId == SCARD_ATTR_DEVICE_FRIENDLY_NAME_A && rv == SCARD_E_UNSUPPORTED_FEATURE) { rv = SCardGetAttrib(hCard, SCARD_ATTR_DEVICE_FRIENDLY_NAME_W, attrLen == 0 ? NULL : (uint8*) &pbAttr, &attrLen); + if( rv != SCARD_S_SUCCESS ) { +#ifdef SCARD_AUTOALLOCATE + if(dwAttrLen == 0) + { + attrLen = 0; + } + else + { + attrLen = SCARD_AUTOALLOCATE; + } +#endif + } } if(dwAttrId == SCARD_ATTR_DEVICE_FRIENDLY_NAME_W && rv == SCARD_E_UNSUPPORTED_FEATURE) { rv = SCardGetAttrib(hCard, SCARD_ATTR_DEVICE_FRIENDLY_NAME_A, attrLen == 0 ? NULL : (uint8*) &pbAttr, &attrLen); + if( rv != SCARD_S_SUCCESS ) { +#ifdef SCARD_AUTOALLOCATE + if(dwAttrLen == 0) + { + attrLen = 0; + } + else + { + attrLen = SCARD_AUTOALLOCATE; + } +#endif + } } if(attrLen > dwAttrLen && pbAttr != NULL) {