From ffebabe145647427ca071b370f2cd0abac867705 Mon Sep 17 00:00:00 2001 From: Raul Metsma Date: Mon, 8 Jun 2026 14:29:16 +0300 Subject: [PATCH] Fix possible UB WE2-1248 Signed-off-by: Raul Metsma --- lib/libpcsc-cpp/include/pcsc-cpp/comp_winscard.hpp | 8 -------- lib/libpcsc-cpp/src/SmartCard.cpp | 8 ++++---- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/lib/libpcsc-cpp/include/pcsc-cpp/comp_winscard.hpp b/lib/libpcsc-cpp/include/pcsc-cpp/comp_winscard.hpp index d44a6ea..5f087ab 100644 --- a/lib/libpcsc-cpp/include/pcsc-cpp/comp_winscard.hpp +++ b/lib/libpcsc-cpp/include/pcsc-cpp/comp_winscard.hpp @@ -32,11 +32,7 @@ #undef IGNORE #endif -#ifdef __APPLE__ -#pragma pack(1) -#else #pragma pack(push, 1) -#endif #ifndef SCARD_CTL_CODE #define SCARD_CTL_CODE(code) (0x42000000 + (code)) @@ -148,8 +144,4 @@ struct PIN_VERIFY_STRUCTURE uint32_t ulDataLength; // length of Data to be sent to the ICC }; -#ifdef __APPLE__ -#pragma pack() -#else #pragma pack(pop) -#endif diff --git a/lib/libpcsc-cpp/src/SmartCard.cpp b/lib/libpcsc-cpp/src/SmartCard.cpp index c3a2aad..cdeaa71 100644 --- a/lib/libpcsc-cpp/src/SmartCard.cpp +++ b/lib/libpcsc-cpp/src/SmartCard.cpp @@ -148,8 +148,9 @@ class CardImpl { uint8_t PINFrameOffset = 0; uint8_t PINLengthOffset = 0; - byte_vector cmd(sizeof(PIN_VERIFY_STRUCTURE)); - auto* data = (PIN_VERIFY_STRUCTURE*)cmd.data(); + const byte_vector& d = commandApdu; + byte_vector cmd(sizeof(PIN_VERIFY_STRUCTURE) + d.size()); + auto* data = new (cmd.data()) PIN_VERIFY_STRUCTURE {}; data->bTimerOut = PIN_PAD_PIN_ENTRY_TIMEOUT; data->bTimerOut2 = PIN_PAD_PIN_ENTRY_TIMEOUT; data->bmFormatString = @@ -161,9 +162,8 @@ class CardImpl data->bNumberMessage = CCIDDefaultInvitationMessage; data->wLangId = lang; data->bMsgIndex = NoInvitationMessage; - const byte_vector& d = commandApdu; data->ulDataLength = uint32_t(d.size()); - cmd.insert(cmd.cend(), d.cbegin(), d.cend()); + std::copy(d.cbegin(), d.cend(), cmd.begin() + sizeof(PIN_VERIFY_STRUCTURE)); auto ioctl = feature(FEATURE_VERIFY_PIN_START); if (feature(FEATURE_VERIFY_PIN_START) == features.cend())