Fixed GetAttrib return length
authorakallabeth <akallabeth@posteo.net>
Sun, 7 Feb 2021 17:13:18 +0000 (18:13 +0100)
committerakallabeth <akallabeth@users.noreply.github.com>
Thu, 25 Feb 2021 08:51:41 +0000 (09:51 +0100)
(cherry picked from commit 5342f351ea441c1c3c1b34af216d583051e84fdc)

channels/smartcard/client/smartcard_operations.c
channels/smartcard/client/smartcard_pack.c

index 8279bea..70d92e3 100644 (file)
@@ -383,14 +383,10 @@ static LONG smartcard_ListReaderGroupsA_Call(SMARTCARD_DEVICE* smartcard,
        DWORD cchGroups = 0;
        IRP* irp = operation->irp;
        cchGroups = SCARD_AUTOALLOCATE;
-       status = ret.ReturnCode =
-           SCardListReaderGroupsA(operation->hContext, (LPSTR)&mszGroups, &cchGroups);
+       ret.ReturnCode = SCardListReaderGroupsA(operation->hContext, (LPSTR)&mszGroups, &cchGroups);
        ret.msz = (BYTE*)mszGroups;
        ret.cBytes = cchGroups;
 
-       if (status != SCARD_S_SUCCESS)
-               return status;
-
        status = smartcard_pack_list_reader_groups_return(smartcard, irp->output, &ret, FALSE);
 
        if (status != SCARD_S_SUCCESS)
index 91432d3..3295ed0 100644 (file)
@@ -2802,6 +2802,8 @@ LONG smartcard_pack_get_attrib_return(SMARTCARD_DEVICE* smartcard, wStream* s,
                return SCARD_F_INTERNAL_ERROR;
 
        cbAttrLen = ret->cbAttrLen;
+       if (ret->ReturnCode == SCARD_E_INSUFFICIENT_BUFFER)
+               cbAttrLen = 0;
        if (cbAttrLen == SCARD_AUTOALLOCATE)
                cbAttrLen = 0;
        Stream_Write_UINT32(s, cbAttrLen); /* cbAttrLen (4 bytes) */