Wrong value of 0 (_FREE_BLOCK) is passed as a second parameter (int nBlockUse) to the operator [1], which causes real DLL on real windows to pop up a MSVCRTD Library window, informing you:
| Debug Error! | Error: memory allocation: bad memory block type.
The test succeeds only on Wine:
| void test_new(void) | { | void *mem; | | mem = pMSVCRTD_operator_new_dbg(42, 0, __FILE__, __LINE__); | ok(mem != NULL, "memory not allocated\n"); | }
The bug sits here already for one year [2] minus one week [3]. It causes long timeouts during run of Winetest. I hate it. Here goes my patch.
I left inability of our operator to differentiate between memory block types (and to handle wrong types) untouched [4]. Hence, I warn about a possible bug in the MSVCRTD_operator_new_dbg().
Is the patch OK? Do I hide the bug? If yes, how should I cope with exceptions in Wine? What else can I do to avoid MSVCRTD Library poping up error window?
[1] http://msdn.microsoft.com/library/shared/deeptree/asp/rightframe.asp?dtcfg=/... [2] http://www.winehq.com/hypermail/wine-cvs/2004/05/0184.html [3] http://test.winehq.org/data/200406181000/ [4] http://msdn.microsoft.com/library/shared/deeptree/asp/rightframe.asp?dtcfg=/...
Index: dlls/msvcrtd/tests/debug.c =================================================================== RCS file: /home/wine/wine/dlls/msvcrtd/tests/debug.c,v retrieving revision 1.1 diff -p -u -r1.1 debug.c --- dlls/msvcrtd/tests/debug.c 18 May 2004 01:05:36 -0000 1.1 +++ dlls/msvcrtd/tests/debug.c 12 Jun 2005 20:54:38 -0000 @@ -23,6 +23,7 @@ #include "windef.h" #include "winbase.h" #include "winnt.h" +#include "crtdbg.h"
#include "wine/test.h"
@@ -55,7 +56,7 @@ void test_new(void) { void *mem;
- mem = pMSVCRTD_operator_new_dbg(42, 0, __FILE__, __LINE__); + mem = pMSVCRTD_operator_new_dbg(42, _NORMAL_BLOCK, __FILE__, __LINE__); ok(mem != NULL, "memory not allocated\n"); }