Module: wine Branch: master Commit: 88f4dabc2772aa83b4d8157e6fd1676a8fdc905e URL: https://gitlab.winehq.org/wine/wine/-/commit/88f4dabc2772aa83b4d8157e6fd1676...
Author: Hans Leidekker hans@codeweavers.com Date: Tue Jun 27 10:33:19 2023 +0200
winscard: Map only the reader name in map_states_inA/W().
---
dlls/winscard/tests/winscard.c | 4 +++- dlls/winscard/winscard.c | 10 ++-------- 2 files changed, 5 insertions(+), 9 deletions(-)
diff --git a/dlls/winscard/tests/winscard.c b/dlls/winscard/tests/winscard.c index e6a58c5e46b..d596f9ca400 100644 --- a/dlls/winscard/tests/winscard.c +++ b/dlls/winscard/tests/winscard.c @@ -109,12 +109,14 @@ static void test_SCardEstablishContext(void) memset( states, 0, sizeof(states) ); states[0].szReader = "\\?PnP?\Notification"; states[1].szReader = readers; + states[1].cbAtr = sizeof(states[1].rgbAtr) + 1; ret = SCardGetStatusChangeA( context, 1000, states, 2 ); ok( ret == SCARD_S_SUCCESS, "got %lx\n", ret ); + ok( states[1].cbAtr <= sizeof(states[1].rgbAtr), "got %lu\n", states[1].cbAtr );
states[1].dwCurrentState = states[1].dwEventState & ~SCARD_STATE_CHANGED; ret = SCardGetStatusChangeA( context, 1000, states, 2 ); - todo_wine ok( ret == SCARD_S_SUCCESS, "got %lx\n", ret ); + ok( ret == SCARD_S_SUCCESS, "got %lx\n", ret );
ret = SCardConnectA( context, readers, SCARD_SHARE_SHARED, SCARD_PROTOCOL_Tx, &connect, NULL ); if (ret == SCARD_E_READER_UNAVAILABLE) diff --git a/dlls/winscard/winscard.c b/dlls/winscard/winscard.c index 026a17295d4..9555aa4ed80 100644 --- a/dlls/winscard/winscard.c +++ b/dlls/winscard/winscard.c @@ -569,14 +569,11 @@ done: static LONG map_states_inA( const SCARD_READERSTATEA *src, struct reader_state *dst, DWORD count ) { DWORD i; + memset( dst, 0, sizeof(*dst) * count ); for (i = 0; i < count; i++) { if (src[i].szReader && ansi_to_utf8( src[i].szReader, (char **)&dst[i].reader ) < 0) return SCARD_E_NO_MEMORY; - dst[i].current_state = src[i].dwCurrentState; - dst[i].event_state = src[i].dwEventState; - dst[i].atr_size = src[i].cbAtr; - memcpy( dst[i].atr, src[i].rgbAtr, src[i].cbAtr ); } return SCARD_S_SUCCESS; } @@ -635,14 +632,11 @@ LONG WINAPI SCardGetStatusChangeA( SCARDCONTEXT context, DWORD timeout, SCARD_RE static LONG map_states_inW( SCARD_READERSTATEW *src, struct reader_state *dst, DWORD count ) { DWORD i; + memset( dst, 0, sizeof(*dst) * count ); for (i = 0; i < count; i++) { if (src[i].szReader && utf16_to_utf8( src[i].szReader, (char **)&dst[i].reader ) < 0) return SCARD_E_NO_MEMORY; - dst[i].current_state = src[i].dwCurrentState; - dst[i].event_state = src[i].dwEventState; - dst[i].atr_size = src[i].cbAtr; - memcpy( dst[i].atr, src[i].rgbAtr, src[i].cbAtr ); } return SCARD_S_SUCCESS; }