mirror of
https://github.com/microsoft/terminal.git
synced 2026-04-06 06:09:50 +00:00
Fix a memory leak in onecore interactivity (#12340)
As noted in #6759:
> `RtlCreateUnicodeString` creates a copy of the string on the process heap and the `PortName` variable has local-scope. The string doesn't get freed with `RtlFreeUnicodeString` before the function returns creating a memory leak.
> `CIS_ALPC_PORT_NAME` is a constant string and the `PortName` variable should instead be initialized using the `RTL_CONSTANT_STRING` macro:
>
> ```c++
> static UNICODE_STRING PortName = RTL_CONSTANT_STRING(CIS_ALPC_PORT_NAME);
> ```
I actually built this in the OS repo to make sure it'll still build, because this code doesn't even build outside Windows.
* [x] Closes #6759
* I work here.
(cherry picked from commit 349b76795f)
This commit is contained in:
committed by
Dustin Howett
parent
07c2a597d2
commit
6cd3e6a24d
@@ -71,12 +71,11 @@ ConIoSrvComm::~ConIoSrvComm()
|
||||
|
||||
[[nodiscard]] NTSTATUS ConIoSrvComm::Connect()
|
||||
{
|
||||
BOOL Ret = TRUE;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
||||
// Port handle and name.
|
||||
HANDLE PortHandle;
|
||||
UNICODE_STRING PortName;
|
||||
static UNICODE_STRING PortName = RTL_CONSTANT_STRING(CIS_ALPC_PORT_NAME);
|
||||
|
||||
// Generic Object Manager attributes for the port object and ALPC-specific
|
||||
// port attributes.
|
||||
@@ -98,13 +97,6 @@ ConIoSrvComm::~ConIoSrvComm()
|
||||
// Structure used to iterate over the handles given to us by the server.
|
||||
ALPC_MESSAGE_HANDLE_INFORMATION HandleInfo;
|
||||
|
||||
// Initialize the server port name.
|
||||
Ret = RtlCreateUnicodeString(&PortName, CIS_ALPC_PORT_NAME);
|
||||
if (!Ret)
|
||||
{
|
||||
return STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
// Initialize the attributes of the port object.
|
||||
InitializeObjectAttributes(&ObjectAttributes,
|
||||
NULL,
|
||||
|
||||
Reference in New Issue
Block a user