From: Alistair Leslie-Hughes Subject: [1/3] dpnet: Add check for mismatched string lengths Message-Id: Date: Thu, 26 Feb 2015 14:31:45 +1100 Hi, Changelog: dpnet: Add check for mismatched string lengths Best Regards Alistair Leslie-Hughes >From c4af33592311c084c8d4cd5c0e7d245e024bd8e6 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes 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