[1/3] dpnet: Add check for mismatched string lengths

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Wed Feb 25 21:31:45 CST 2015


Hi,

Changelog:
        dpnet: Add check for mismatched string lengths


Best Regards
    Alistair Leslie-Hughes

-------------- next part --------------
>From c4af33592311c084c8d4cd5c0e7d245e024bd8e6 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date: Thu, 26 Feb 2015 10:28:06 +1100
Subject: [PATCH 6/8] Add check for mismatched string lengths

---
 dlls/dpnet/address.c       | 4 ++++
 dlls/dpnet/tests/address.c | 9 +++++++++
 2 files changed, 13 insertions(+)

diff --git a/dlls/dpnet/address.c b/dlls/dpnet/address.c
index 2062bc4..e25c54e 100644
--- a/dlls/dpnet/address.c
+++ b/dlls/dpnet/address.c
@@ -425,12 +425,16 @@ static HRESULT WINAPI IDirectPlay8AddressImpl_AddComponent(IDirectPlay8Address *
             TRACE("(%p, %u): GUID Type -> %s\n", lpvData, dwDataSize, debugstr_guid(lpvData));
             break;
         case DPNA_DATATYPE_STRING:
+           if (((strlenW((WCHAR*)lpvData)+1)*sizeof(WCHAR)) != dwDataSize)
+                return DPNERR_INVALIDPARAM;
             heap_free(entry->data.string);
 
             entry->data.string = heap_strdupW((WCHAR*)lpvData);
             TRACE("(%p, %u): STRING Type -> %s\n", lpvData, dwDataSize, debugstr_w((WCHAR*)lpvData));
             break;
         case DPNA_DATATYPE_STRING_ANSI:
+            if ((strlen((const CHAR*)lpvData)+1) != dwDataSize)
+                return DPNERR_INVALIDPARAM;
             heap_free(entry->data.ansi);
 
             entry->data.ansi = heap_strdupA((CHAR*)lpvData);
diff --git a/dlls/dpnet/tests/address.c b/dlls/dpnet/tests/address.c
index bad4fa4..a9c70b0 100644
--- a/dlls/dpnet/tests/address.c
+++ b/dlls/dpnet/tests/address.c
@@ -93,6 +93,15 @@ static void address_addcomponents(void)
         hr = IDirectPlay8Address_AddComponent(localaddr, UNKNOWN, &IID_Random, sizeof(GUID)+1, DPNA_DATATYPE_GUID);
         ok(hr == DPNERR_INVALIDPARAM, "got 0x%08x\n", hr);
 
+        hr = IDirectPlay8Address_AddComponent(localaddr, DPNA_KEY_HOSTNAME, &localhost, sizeof(localhost)+2, DPNA_DATATYPE_STRING);
+        ok(hr == DPNERR_INVALIDPARAM, "got 0x%08x\n", hr);
+
+        hr = IDirectPlay8Address_AddComponent(localaddr, DPNA_KEY_HOSTNAME, "testing", 8+2, DPNA_DATATYPE_STRING_ANSI);
+        ok(hr == DPNERR_INVALIDPARAM, "got 0x%08x\n", hr);
+
+        hr = IDirectPlay8Address_AddComponent(localaddr, DPNA_KEY_HOSTNAME, "testing", 8, DPNA_DATATYPE_STRING_ANSI);
+        ok(hr == S_OK, "got 0x%08x\n", hr);
+
         hr = IDirectPlay8Address_AddComponent(localaddr, DPNA_KEY_HOSTNAME, &localhost, sizeof(localhost), DPNA_DATATYPE_STRING);
         ok(hr == S_OK, "got 0x%08x\n", hr);
 
-- 
1.9.1




More information about the wine-patches mailing list