From ffc5491757d3148edbe855834ffee2861d7b9ee8 Mon Sep 17 00:00:00 2001 From: Ahmad Samir Date: Sat, 17 May 2025 15:57:14 +0300 Subject: [PATCH] QLocalServer: use std::unique_ptr instead of QScopedPointer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTBUG-132213 Change-Id: I6a18e787efa9a2ecfe89339569a9724467ac3e6a Reviewed-by: MÃ¥rten Nordheim --- src/network/socket/qlocalserver_win.cpp | 26 +++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/network/socket/qlocalserver_win.cpp b/src/network/socket/qlocalserver_win.cpp index f075d0f0a16..071e4b5d798 100644 --- a/src/network/socket/qlocalserver_win.cpp +++ b/src/network/socket/qlocalserver_win.cpp @@ -12,6 +12,8 @@ #include #include +#include + // The buffer size need to be 0 otherwise data could be // lost if the socket that has written data closes the connection // before it is read. Pipewriter is used for write buffering. @@ -33,7 +35,7 @@ bool QLocalServerPrivate::addListener() sa.bInheritHandle = FALSE; //non inheritable handle, same as default sa.lpSecurityDescriptor = 0; //default security descriptor - QScopedPointer pSD; + std::unique_ptr pSD; PSID worldSID = 0; QByteArray aclBuffer; QByteArray tokenUserBuffer; @@ -42,7 +44,7 @@ bool QLocalServerPrivate::addListener() // create security descriptor if access options were specified if ((socketOptions.value() & QLocalServer::WorldAccessOption)) { pSD.reset(new SECURITY_DESCRIPTOR); - if (!InitializeSecurityDescriptor(pSD.data(), SECURITY_DESCRIPTOR_REVISION)) { + if (!InitializeSecurityDescriptor(pSD.get(), SECURITY_DESCRIPTOR_REVISION)) { setError("QLocalServerPrivate::addListener"_L1); return false; } @@ -76,10 +78,14 @@ bool QLocalServerPrivate::addListener() SID_NAME_USE groupNameUse; LPWSTR groupNameSid; LookupAccountSid(0, pTokenGroup->PrimaryGroup, 0, &groupNameSize, 0, &domainNameSize, &groupNameUse); - QScopedPointer> groupName(new wchar_t[groupNameSize]); - QScopedPointer> domainName(new wchar_t[domainNameSize]); - if (LookupAccountSid(0, pTokenGroup->PrimaryGroup, groupName.data(), &groupNameSize, domainName.data(), &domainNameSize, &groupNameUse)) { - qDebug() << "primary group" << QString::fromWCharArray(domainName.data()) << "\\" << QString::fromWCharArray(groupName.data()) << "type=" << groupNameUse; + auto groupName = std::unique_ptr(new wchar_t[groupNameSize]); + auto domainName = std::unique_ptr(new wchar_t[domainNameSize]); + const bool lookup = LookupAccountSid(0, pTokenGroup->PrimaryGroup, groupName.get(), + &groupNameSize, domainName.get(), &domainNameSize, + &groupNameUse); + if (lookup) { + qDebug() << "primary group" << QString::fromWCharArray(domainName.get()) << "\\" + << QString::fromWCharArray(groupName.get()) << "type=" << groupNameUse; } if (ConvertSidToStringSid(pTokenGroup->PrimaryGroup, &groupNameSid)) { qDebug() << "primary group SID" << QString::fromWCharArray(groupNameSid) << "valid" << IsValidSid(pTokenGroup->PrimaryGroup); @@ -127,15 +133,15 @@ bool QLocalServerPrivate::addListener() return false; } } - SetSecurityDescriptorOwner(pSD.data(), pTokenUser->User.Sid, FALSE); - SetSecurityDescriptorGroup(pSD.data(), pTokenGroup->PrimaryGroup, FALSE); - if (!SetSecurityDescriptorDacl(pSD.data(), TRUE, acl, FALSE)) { + SetSecurityDescriptorOwner(pSD.get(), pTokenUser->User.Sid, FALSE); + SetSecurityDescriptorGroup(pSD.get(), pTokenGroup->PrimaryGroup, FALSE); + if (!SetSecurityDescriptorDacl(pSD.get(), TRUE, acl, FALSE)) { setError("QLocalServerPrivate::addListener"_L1); FreeSid(worldSID); return false; } - sa.lpSecurityDescriptor = pSD.data(); + sa.lpSecurityDescriptor = pSD.get(); } listener->handle = CreateNamedPipe(