From febc871e5204fc0236f862b979396c6a15301ba6 Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Wed, 22 Jan 2014 18:52:14 -0500 Subject: [PATCH 1/4] Fix HGLOBAL leak in plClipboard --- .../Plasma/PubUtilLib/plClipboard/plClipboard.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Sources/Plasma/PubUtilLib/plClipboard/plClipboard.cpp b/Sources/Plasma/PubUtilLib/plClipboard/plClipboard.cpp index d3a167a9..4d4b25d8 100755 --- a/Sources/Plasma/PubUtilLib/plClipboard/plClipboard.cpp +++ b/Sources/Plasma/PubUtilLib/plClipboard/plClipboard.cpp @@ -43,6 +43,8 @@ Mead, WA 99021 #include "plClipboard.h" #include "hsWindows.h" +#include + plClipboard& plClipboard::GetInstance() { static plClipboard theInstance; @@ -93,8 +95,8 @@ void plClipboard::SetClipboardText(const plString& text) if (len == 0) return; - HGLOBAL copy = ::GlobalAlloc(GMEM_MOVEABLE, (len + 1) * sizeof(wchar_t)); - if (copy == NULL) + std::unique_ptr copy(::GlobalAlloc(GMEM_MOVEABLE, (len + 1) * sizeof(wchar_t)), ::GlobalFree); + if (!copy) return; if (!::OpenClipboard(NULL)) @@ -102,12 +104,12 @@ void plClipboard::SetClipboardText(const plString& text) ::EmptyClipboard(); - wchar_t* target = (wchar_t*)::GlobalLock(copy); + wchar_t* target = (wchar_t*)::GlobalLock(copy.get()); memcpy(target, buf.GetData(), (len + 1) * sizeof(wchar_t)); target[len] = '\0'; - ::GlobalUnlock(copy); + ::GlobalUnlock(copy.get()); - ::SetClipboardData(CF_UNICODETEXT, copy); + ::SetClipboardData(CF_UNICODETEXT, copy.get()); ::CloseClipboard(); #endif } From 571bdbab01673589e14689ec893f302c3f9433ef Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Wed, 22 Jan 2014 19:02:23 -0500 Subject: [PATCH 2/4] Fix leak in GetLinkToMyNeighborhood pyAgeLinkStruct copies the plAgeLinkStruct, so we can create our initial ALS on the stack and avoid crazy memory logic. --- Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.cpp index 57189f3a..14416120 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.cpp @@ -183,14 +183,12 @@ PyObject *pyVaultPlayerNode::GetPlayerInfo() PyObject *pyVaultPlayerNode::GetLinkToMyNeighborhood() { - plAgeLinkStruct * link = new plAgeLinkStruct(); - - if (VaultGetLinkToMyNeighborhood(link)) { - PyObject * result = pyAgeLinkStruct::New(link); + plAgeLinkStruct link; + if (VaultGetLinkToMyNeighborhood(&link)) { + PyObject * result = pyAgeLinkStruct::New(&link); return result; } - delete link; PYTHON_RETURN_NONE; } From 9e6200507b8616cbb1ee32c47918e159785c0a41 Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Wed, 22 Jan 2014 19:06:51 -0500 Subject: [PATCH 3/4] Fix potential leak in OfferLinkToPlayer --- .../Plasma/PubUtilLib/plNetClient/plNetLinkingMgr.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Sources/Plasma/PubUtilLib/plNetClient/plNetLinkingMgr.cpp b/Sources/Plasma/PubUtilLib/plNetClient/plNetLinkingMgr.cpp index ff38afa6..7f54d112 100644 --- a/Sources/Plasma/PubUtilLib/plNetClient/plNetLinkingMgr.cpp +++ b/Sources/Plasma/PubUtilLib/plNetClient/plNetLinkingMgr.cpp @@ -740,19 +740,18 @@ void plNetLinkingMgr::OfferLinkToPlayer( const plAgeLinkStruct * inInfo, uint32_ // my special version - cjp void plNetLinkingMgr::OfferLinkToPlayer( const plAgeLinkStruct * inInfo, uint32_t playerID, plKey replyKey ) { - plNetClientMgr *mgr = plNetClientMgr::GetInstance(); - plLinkToAgeMsg * linkM = new plLinkToAgeMsg(inInfo); - linkM->AddReceiver(mgr->GetKey()); - - plKey host = mgr->GetLocalPlayerKey(); plNetTransport &transport = mgr->TransportMgr(); int guestIdx = transport.FindMember(playerID); plNetTransportMember *guestMem = transport.GetMember(guestIdx); // -1 ? - if(guestMem) + if (guestMem) { + plLinkToAgeMsg* linkM = new plLinkToAgeMsg(inInfo); + linkM->AddReceiver(mgr->GetKey()); + plKey guest = guestMem->GetAvatarKey(); + plKey host = mgr->GetLocalPlayerKey(); plAvatarMgr::OfferLinkingBook(host, guest, linkM, replyKey); } } From 5d919f6d285a82adb77ef8e0591c361a41e858fb Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Wed, 22 Jan 2014 19:15:29 -0500 Subject: [PATCH 4/4] Fix leak in GetLinkToCity --- Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.cpp b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.cpp index 14416120..7c277500 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyVaultPlayerNode.cpp @@ -194,14 +194,12 @@ PyObject *pyVaultPlayerNode::GetLinkToMyNeighborhood() PyObject *pyVaultPlayerNode::GetLinkToCity() { - plAgeLinkStruct * link = new plAgeLinkStruct(); - - if (VaultGetLinkToCity(link)) { - PyObject * result = pyAgeLinkStruct::New(link); + plAgeLinkStruct link; + if (VaultGetLinkToCity(&link)) { + PyObject * result = pyAgeLinkStruct::New(&link); return result; } - delete link; PYTHON_RETURN_NONE; }