Module: wine Branch: refs/heads/master Commit: 839f00a967045250ac5d77f7af4b0f00269ff76a URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=839f00a967045250ac5d77f7...
Author: Detlef Riekenberg wine.dev@web.de Date: Fri Mar 31 12:27:30 2006 +0200
kernel: Fix handling of invalid parameter in GlobalSize().
---
dlls/kernel/heap.c | 19 +++++++++++++------ dlls/kernel/tests/heap.c | 10 ++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/dlls/kernel/heap.c b/dlls/kernel/heap.c index c76f876..730379c 100644 --- a/dlls/kernel/heap.c +++ b/dlls/kernel/heap.c @@ -751,13 +751,19 @@ HGLOBAL WINAPI GlobalFree(HGLOBAL hmem) * * Get the size of a global memory object. * + * PARAMS + * hmem [I] Handle of the global memory object + * * RETURNS - * Size in bytes of the global memory object - * 0: Failure + * Failure: 0 + * Success: Size in Bytes of the global memory object + * + * NOTES + * When the handle is invalid, last error is set to ERROR_INVALID_HANDLE + * */ -SIZE_T WINAPI GlobalSize( - HGLOBAL hmem /* [in] Handle of global memory object */ -) { +SIZE_T WINAPI GlobalSize(HGLOBAL hmem) +{ DWORD retval; PGLOBAL32_INTERN pintern;
@@ -785,7 +791,8 @@ SIZE_T WINAPI GlobalSize( } else { - WARN("invalid handle\n"); + WARN("invalid handle %p (Magic: 0x%04x)\n", hmem, pintern->Magic); + SetLastError(ERROR_INVALID_HANDLE); retval=0; } RtlUnlockHeap(GetProcessHeap()); diff --git a/dlls/kernel/tests/heap.c b/dlls/kernel/tests/heap.c index fee1830..089c502 100644 --- a/dlls/kernel/tests/heap.c +++ b/dlls/kernel/tests/heap.c @@ -92,6 +92,11 @@ START_TEST(heap) ok( (flags == GMEM_INVALID_HANDLE) && (GetLastError() == ERROR_INVALID_HANDLE), "returned 0x%04x with 0x%08lx (expected GMEM_INVALID_HANDLE with " \ "ERROR_INVALID_HANDLE)\n", flags, GetLastError()); + SetLastError(MAGIC_DEAD); + size = GlobalSize(gbl); + ok( (size == 0) && (GetLastError() == ERROR_INVALID_HANDLE), + "returned %ld with 0x%08lx (expected '0' with ERROR_INVALID_HANDLE)\n", + size, GetLastError());
/* Local*() functions */ @@ -128,6 +133,11 @@ START_TEST(heap) ok( (flags == LMEM_INVALID_HANDLE) && (GetLastError() == ERROR_INVALID_HANDLE), "returned 0x%04x with 0x%08lx (expected LMEM_INVALID_HANDLE with " \ "ERROR_INVALID_HANDLE)\n", flags, GetLastError()); + SetLastError(MAGIC_DEAD); + size = LocalSize(gbl); + ok( (size == 0) && (GetLastError() == ERROR_INVALID_HANDLE), + "returned %ld with 0x%08lx (expected '0' with ERROR_INVALID_HANDLE)\n", + size, GetLastError());
/* trying to lock empty memory should give an error */