From bd7f0ecd245a99b3d5353e9bd080ca7e1d8c7444 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Tue, 4 Jul 2023 14:42:14 +0200 Subject: [PATCH] [collections] fix ListDictionary usage --- channels/rdpdr/server/rdpdr_main.c | 7 +++++-- channels/serial/client/serial_main.c | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/channels/rdpdr/server/rdpdr_main.c b/channels/rdpdr/server/rdpdr_main.c index 330e7fa79..a6abd6a77 100644 --- a/channels/rdpdr/server/rdpdr_main.c +++ b/channels/rdpdr/server/rdpdr_main.c @@ -181,7 +181,8 @@ static BOOL rdpdr_server_enqueue_irp(RdpdrServerContext* context, RDPDR_IRP* irp { WINPR_ASSERT(context); WINPR_ASSERT(context->priv); - return ListDictionary_Add(context->priv->IrpList, (void*)(size_t)irp->CompletionId, irp); + const uintptr_t key = irp->CompletionId + 1ull; + return ListDictionary_Add(context->priv->IrpList, (void*)key, irp); } static RDPDR_IRP* rdpdr_server_dequeue_irp(RdpdrServerContext* context, UINT32 completionId) @@ -189,7 +190,9 @@ static RDPDR_IRP* rdpdr_server_dequeue_irp(RdpdrServerContext* context, UINT32 c RDPDR_IRP* irp; WINPR_ASSERT(context); WINPR_ASSERT(context->priv); - irp = (RDPDR_IRP*)ListDictionary_Take(context->priv->IrpList, (void*)(size_t)completionId); + + const uintptr_t key = completionId + 1ull; + irp = (RDPDR_IRP*)ListDictionary_Take(context->priv->IrpList, (void*)key); return irp; } diff --git a/channels/serial/client/serial_main.c b/channels/serial/client/serial_main.c index 56f55700c..d282bdbaf 100644 --- a/channels/serial/client/serial_main.c +++ b/channels/serial/client/serial_main.c @@ -586,7 +586,7 @@ static void create_irp_thread(SERIAL_DEVICE* serial, IRP* irp) * FIXME: behavior documented somewhere? behavior not yet * observed with FreeRDP). */ - key = irp->CompletionId; + key = irp->CompletionId + 1ull; previousIrpThread = ListDictionary_GetItemValue(serial->IrpThreads, (void*)key); if (previousIrpThread) @@ -646,7 +646,7 @@ static void create_irp_thread(SERIAL_DEVICE* serial, IRP* irp) goto error_handle; } - key = irp->CompletionId; + key = irp->CompletionId + 1ull; if (!ListDictionary_Add(serial->IrpThreads, (void*)key, irpThread)) {