From f0a3c3c2f4a2757f94974bd30b1985e0cf160f93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Thu, 9 Oct 2014 17:40:56 +0200 Subject: [PATCH] Change return value of string_wchar_dtor in msvcp90 instead of msvcp60. --- patches/Makefile | 18 +++--- ...ring_wchar_dtor-needs-to-return-NULL.patch | 43 -------------- ...ring_wchar_dtor-needs-to-return-NULL.patch | 43 ++++++++++++++ ...-tests-to-check-that-basic_string_w.patch} | 56 ++++++++++--------- .../definition | 0 5 files changed, 81 insertions(+), 79 deletions(-) delete mode 100644 patches/msvcp60-basic_string_wchar_dtor/0001-msvcp60-basic_string_wchar_dtor-needs-to-return-NULL.patch create mode 100644 patches/msvcp90-basic_string_wchar_dtor/0001-msvcp90-basic_string_wchar_dtor-needs-to-return-NULL.patch rename patches/{msvcp60-basic_string_wchar_dtor/0002-msvcp60-tests-Add-tests-to-check-that-basic_string_w.patch => msvcp90-basic_string_wchar_dtor/0002-msvcp90-tests-Add-tests-to-check-that-basic_string_w.patch} (80%) rename patches/{msvcp60-basic_string_wchar_dtor => msvcp90-basic_string_wchar_dtor}/definition (100%) diff --git a/patches/Makefile b/patches/Makefile index 487cf917..a3fa31a5 100644 --- a/patches/Makefile +++ b/patches/Makefile @@ -38,7 +38,7 @@ PATCHLIST := \ kernel32-Named_Pipe.ok \ kernel32-UTF7_Support.ok \ libs-Unicode_Collation.ok \ - msvcp60-basic_string_wchar_dtor.ok \ + msvcp90-basic_string_wchar_dtor.ok \ ntdll-ATL_Thunk.ok \ ntdll-DOS_Attributes.ok \ ntdll-Dynamic_DST.ok \ @@ -521,7 +521,7 @@ libs-Unicode_Collation.ok: echo '+ { "libs-Unicode_Collation", "Dmitry Timoshkov", "Fix comparison of punctuation characters." },'; \ ) > libs-Unicode_Collation.ok -# Patchset msvcp60-basic_string_wchar_dtor +# Patchset msvcp90-basic_string_wchar_dtor # | # | Included patches: # | * basic_string_wchar_dtor needs to return NULL. [by Michael Müller] @@ -530,15 +530,15 @@ libs-Unicode_Collation.ok: # | * [#37358] FEAR 1 installer expects basic_string_wchar_dtor to return NULL # | # | Modified files: -# | * dlls/msvcp60/msvcp.h, dlls/msvcp60/string.c, dlls/msvcp60/tests/string.c +# | * dlls/msvcp90/msvcp90.h, dlls/msvcp90/string.c, dlls/msvcp90/tests/string.c # | -.INTERMEDIATE: msvcp60-basic_string_wchar_dtor.ok -msvcp60-basic_string_wchar_dtor.ok: - $(call APPLY_FILE,msvcp60-basic_string_wchar_dtor/0001-msvcp60-basic_string_wchar_dtor-needs-to-return-NULL.patch) - $(call APPLY_FILE,msvcp60-basic_string_wchar_dtor/0002-msvcp60-tests-Add-tests-to-check-that-basic_string_w.patch) +.INTERMEDIATE: msvcp90-basic_string_wchar_dtor.ok +msvcp90-basic_string_wchar_dtor.ok: + $(call APPLY_FILE,msvcp90-basic_string_wchar_dtor/0001-msvcp90-basic_string_wchar_dtor-needs-to-return-NULL.patch) + $(call APPLY_FILE,msvcp90-basic_string_wchar_dtor/0002-msvcp90-tests-Add-tests-to-check-that-basic_string_w.patch) @( \ - echo '+ { "msvcp60-basic_string_wchar_dtor", "Michael Müller", "basic_string_wchar_dtor needs to return NULL." },'; \ - ) > msvcp60-basic_string_wchar_dtor.ok + echo '+ { "msvcp90-basic_string_wchar_dtor", "Michael Müller", "basic_string_wchar_dtor needs to return NULL." },'; \ + ) > msvcp90-basic_string_wchar_dtor.ok # Patchset ntdll-ATL_Thunk # | diff --git a/patches/msvcp60-basic_string_wchar_dtor/0001-msvcp60-basic_string_wchar_dtor-needs-to-return-NULL.patch b/patches/msvcp60-basic_string_wchar_dtor/0001-msvcp60-basic_string_wchar_dtor-needs-to-return-NULL.patch deleted file mode 100644 index ecf9c453..00000000 --- a/patches/msvcp60-basic_string_wchar_dtor/0001-msvcp60-basic_string_wchar_dtor-needs-to-return-NULL.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 9274fd3f783aceb822e5ba83797cd8b77eee1872 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Michael=20M=C3=BCller?= -Date: Thu, 9 Oct 2014 05:08:36 +0200 -Subject: msvcp60: basic_string_wchar_dtor needs to return NULL. - ---- - dlls/msvcp60/msvcp.h | 2 +- - dlls/msvcp60/string.c | 3 ++- - 2 files changed, 3 insertions(+), 2 deletions(-) - -diff --git a/dlls/msvcp60/msvcp.h b/dlls/msvcp60/msvcp.h -index 0a8c57c..7a3017c 100644 ---- a/dlls/msvcp60/msvcp.h -+++ b/dlls/msvcp60/msvcp.h -@@ -64,7 +64,7 @@ typedef struct - basic_string_wchar* __thiscall basic_string_wchar_ctor(basic_string_wchar*); - basic_string_wchar* basic_string_wchar_ctor_cstr(basic_string_wchar*, const wchar_t*); - basic_string_wchar* basic_string_wchar_ctor_cstr_len(basic_string_wchar*, const wchar_t*, MSVCP_size_t); --void __thiscall basic_string_wchar_dtor(basic_string_wchar*); -+void* __thiscall basic_string_wchar_dtor(basic_string_wchar*); - const wchar_t* __thiscall basic_string_wchar_c_str(const basic_string_wchar*); - void basic_string_wchar_clear(basic_string_wchar*); - basic_string_wchar* __thiscall basic_string_wchar_append_ch(basic_string_wchar*, wchar_t); -diff --git a/dlls/msvcp60/string.c b/dlls/msvcp60/string.c -index f1b2b8e..b1a6c42 100644 ---- a/dlls/msvcp60/string.c -+++ b/dlls/msvcp60/string.c -@@ -2264,10 +2264,11 @@ basic_string_wchar* __thiscall basic_string_wchar_copy_ctor( - /* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@XZ */ - /* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@XZ */ - DEFINE_THISCALL_WRAPPER(basic_string_wchar_dtor, 4) --void __thiscall basic_string_wchar_dtor(basic_string_wchar *this) -+void* __thiscall basic_string_wchar_dtor(basic_string_wchar *this) - { - TRACE("%p\n", this); - basic_string_wchar__Tidy(this, TRUE); -+ return NULL; - } - - /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIPBGI@Z */ --- -1.9.1 - diff --git a/patches/msvcp90-basic_string_wchar_dtor/0001-msvcp90-basic_string_wchar_dtor-needs-to-return-NULL.patch b/patches/msvcp90-basic_string_wchar_dtor/0001-msvcp90-basic_string_wchar_dtor-needs-to-return-NULL.patch new file mode 100644 index 00000000..0864c8bc --- /dev/null +++ b/patches/msvcp90-basic_string_wchar_dtor/0001-msvcp90-basic_string_wchar_dtor-needs-to-return-NULL.patch @@ -0,0 +1,43 @@ +From ee4a399d58b884d54387aeb1290fba2e304157d7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Michael=20M=C3=BCller?= +Date: Thu, 9 Oct 2014 17:32:58 +0200 +Subject: msvcp90: basic_string_wchar_dtor needs to return NULL + +--- + dlls/msvcp90/msvcp90.h | 2 +- + dlls/msvcp90/string.c | 3 ++- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/dlls/msvcp90/msvcp90.h b/dlls/msvcp90/msvcp90.h +index 5062bdc..be87efb 100644 +--- a/dlls/msvcp90/msvcp90.h ++++ b/dlls/msvcp90/msvcp90.h +@@ -109,7 +109,7 @@ typedef struct + basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor(basic_string_wchar*); + basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr(basic_string_wchar*, const wchar_t*); + basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_len(basic_string_wchar*, const wchar_t*, MSVCP_size_t); +-void __thiscall MSVCP_basic_string_wchar_dtor(basic_string_wchar*); ++void* __thiscall MSVCP_basic_string_wchar_dtor(basic_string_wchar*); + const wchar_t* __thiscall MSVCP_basic_string_wchar_c_str(const basic_string_wchar*); + void __thiscall MSVCP_basic_string_wchar_clear(basic_string_wchar*); + basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_ch(basic_string_wchar*, wchar_t); +diff --git a/dlls/msvcp90/string.c b/dlls/msvcp90/string.c +index ce05613..982b801 100644 +--- a/dlls/msvcp90/string.c ++++ b/dlls/msvcp90/string.c +@@ -2704,10 +2704,11 @@ basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_ptr_ptr(basic_strin + /* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@XZ */ + /* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@XZ */ + DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_dtor, 4) +-void __thiscall MSVCP_basic_string_wchar_dtor(basic_string_wchar *this) ++void* __thiscall MSVCP_basic_string_wchar_dtor(basic_string_wchar *this) + { + TRACE("%p\n", this); + basic_string_wchar_tidy(this, TRUE, 0); ++ return NULL; + } + + /* ?size@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIXZ */ +-- +1.9.1 + diff --git a/patches/msvcp60-basic_string_wchar_dtor/0002-msvcp60-tests-Add-tests-to-check-that-basic_string_w.patch b/patches/msvcp90-basic_string_wchar_dtor/0002-msvcp90-tests-Add-tests-to-check-that-basic_string_w.patch similarity index 80% rename from patches/msvcp60-basic_string_wchar_dtor/0002-msvcp60-tests-Add-tests-to-check-that-basic_string_w.patch rename to patches/msvcp90-basic_string_wchar_dtor/0002-msvcp90-tests-Add-tests-to-check-that-basic_string_w.patch index 1e633526..e9b55a01 100644 --- a/patches/msvcp60-basic_string_wchar_dtor/0002-msvcp60-tests-Add-tests-to-check-that-basic_string_w.patch +++ b/patches/msvcp90-basic_string_wchar_dtor/0002-msvcp90-tests-Add-tests-to-check-that-basic_string_w.patch @@ -1,27 +1,27 @@ -From 7eda43ab8aa84bda2dcf6624e5da45063b7a4162 Mon Sep 17 00:00:00 2001 +From 5514f8e7f8421577dc300c146ed1943d254d903c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= -Date: Thu, 9 Oct 2014 05:22:24 +0200 -Subject: msvcp60/tests: Add tests to check that basic_string_wchar_dtor +Date: Thu, 9 Oct 2014 17:35:50 +0200 +Subject: msvcp90/tests: Add tests to check that basic_string_wchar_dtor returns NULL. --- - dlls/msvcp60/tests/string.c | 74 ++++++++++++++++++++++++++++++--------------- - 1 file changed, 50 insertions(+), 24 deletions(-) + dlls/msvcp90/tests/string.c | 79 +++++++++++++++++++++++++++++---------------- + 1 file changed, 52 insertions(+), 27 deletions(-) -diff --git a/dlls/msvcp60/tests/string.c b/dlls/msvcp60/tests/string.c -index 3ed1480..0ed0648 100644 ---- a/dlls/msvcp60/tests/string.c -+++ b/dlls/msvcp60/tests/string.c -@@ -77,7 +77,7 @@ static size_t *p_basic_string_char_npos; +diff --git a/dlls/msvcp90/tests/string.c b/dlls/msvcp90/tests/string.c +index f1aa92a..a2cd46f 100644 +--- a/dlls/msvcp90/tests/string.c ++++ b/dlls/msvcp90/tests/string.c +@@ -85,7 +85,7 @@ static size_t *p_basic_string_char_npos; static basic_string_wchar* (__thiscall *p_basic_string_wchar_ctor)(basic_string_wchar*); static basic_string_wchar* (__thiscall *p_basic_string_wchar_copy_ctor)(basic_string_wchar*, basic_string_wchar*); - static basic_string_wchar* (__thiscall *p_basic_string_wchar_ctor_cstr_alloc)(basic_string_wchar*, const wchar_t*, void*); + static basic_string_wchar* (__thiscall *p_basic_string_wchar_ctor_cstr)(basic_string_wchar*, const wchar_t*); -static void (__thiscall *p_basic_string_wchar_dtor)(basic_string_wchar*); +static void* (__thiscall *p_basic_string_wchar_dtor)(basic_string_wchar*); static basic_string_wchar* (__thiscall *p_basic_string_wchar_erase)(basic_string_wchar*, size_t, size_t); static basic_string_wchar* (__thiscall *p_basic_string_wchar_assign_cstr_len)(basic_string_wchar*, const wchar_t*, size_t); static const wchar_t* (__thiscall *p_basic_string_wchar_cstr)(basic_string_wchar*); -@@ -92,32 +92,35 @@ static void (__thiscall *p_basic_string_wchar_swap)(basic_string_wchar*, basic_s +@@ -113,32 +113,35 @@ static void __cdecl test_invalid_parameter_handler(const wchar_t *expression, #include "pshpack1.h" struct thiscall_thunk { @@ -74,7 +74,7 @@ index 3ed1480..0ed0648 100644 thunk->jmp_edx = 0xe2ff; /* jmp *%edx */ call_thiscall_func1 = (void *)thunk; call_thiscall_func2 = (void *)thunk; -@@ -127,15 +130,17 @@ static void init_thiscall_thunk(void) +@@ -148,15 +151,16 @@ static void init_thiscall_thunk(void) call_thiscall_func6 = (void *)thunk; } @@ -82,24 +82,26 @@ index 3ed1480..0ed0648 100644 -#define call_func2(func,_this,a) call_thiscall_func2(func,_this,(const void*)a) -#define call_func3(func,_this,a,b) call_thiscall_func3(func,_this,(const void*)a,(const void*)b) -#define call_func4(func,_this,a,b,c) call_thiscall_func4(func,_this,(const void*)a,\ -+ +- (const void*)b,(const void*)c) +-#define call_func5(func,_this,a,b,c,d) call_thiscall_func5(func,_this,(const void*)a,\ +- (const void*)b,(const void*)c,(const void*)d) +-#define call_func6(func,_this,a,b,c,d,e) call_thiscall_func6(func,_this,(const void*)a,\ +- (const void*)b,(const void*)c,(const void*)d,(const void*)e) +#define call_func1(func,_this) call_thiscall_func1(func,0,_this) +#define call_func2(func,_this,a) call_thiscall_func2(func,0,_this,(const void*)a) +#define call_func3(func,_this,a,b) call_thiscall_func3(func,0,_this,(const void*)a,(const void*)b) +#define call_func4(func,_this,a,b,c) call_thiscall_func4(func,0,_this,(const void*)a,\ - (const void*)b,(const void*)c) --#define call_func5(func,_this,a,b,c,d) call_thiscall_func5(func,_this,(const void*)a,\ ++ (const void*)b,(const void*)c) +#define call_func5(func,_this,a,b,c,d) call_thiscall_func5(func,0,_this,(const void*)a,\ - (const void*)b,(const void*)c,(const void*)d) --#define call_func6(func,_this,a,b,c,d,e) call_thiscall_func6(func,_this,(const void*)a,\ ++ (const void*)b,(const void*)c,(const void*)d) +#define call_func6(func,_this,a,b,c,d,e) call_thiscall_func6(func,0,_this,(const void*)a,\ - (const void*)b,(const void*)c,(const void*)d,(const void*)e) ++ (const void*)b,(const void*)c,(const void*)d,(const void*)e) +#define call_func1_eax(func,eax,_this) call_thiscall_func1(func,eax,_this) #else -@@ -687,6 +692,26 @@ static void test_basic_string_wchar_swap(void) { - call_func1(p_basic_string_wchar_dtor, &str2); +@@ -767,6 +771,26 @@ static void test_basic_string_char_find_last_not_of(void) { + } } +static void test_basic_string_dtor_eax(void) { @@ -111,12 +113,12 @@ index 3ed1480..0ed0648 100644 + mbstowcs(wtmp1, "qwerty", 32); + + /* eax = 0x1337 */ -+ call_func3(p_basic_string_wchar_ctor_cstr_alloc, &str1, wtmp1, &fake_allocator); ++ call_func2(p_basic_string_wchar_ctor_cstr, &str1, wtmp1); + ret = call_func1_eax(p_basic_string_wchar_dtor, 0x1337, &str1); + ok (ret == (void *)0x0, "Expected eax value 0x%x, got 0x%x\n", 0x0, (unsigned int)ret); + + /* eax = 0xdeadbeef */ -+ call_func3(p_basic_string_wchar_ctor_cstr_alloc, &str1, wtmp1, &fake_allocator); ++ call_func2(p_basic_string_wchar_ctor_cstr, &str1, wtmp1); + ret = call_func1_eax(p_basic_string_wchar_dtor, 0xdeadbeef, &str1); + ok (ret == (void *)0x0, "Expected eax value 0x%x, got 0x%x\n", 0x0, (unsigned int)ret); +#endif @@ -125,14 +127,14 @@ index 3ed1480..0ed0648 100644 START_TEST(string) { if(!init()) -@@ -702,6 +727,7 @@ START_TEST(string) - test_basic_string_char_replace(); +@@ -783,6 +807,7 @@ START_TEST(string) test_basic_string_wchar(); test_basic_string_wchar_swap(); + test_basic_string_char_find_last_not_of(); + test_basic_string_dtor_eax(); - FreeLibrary(msvcp); - } + ok(!invalid_parameter, "invalid_parameter_handler was invoked too many times\n"); + -- 1.9.1 diff --git a/patches/msvcp60-basic_string_wchar_dtor/definition b/patches/msvcp90-basic_string_wchar_dtor/definition similarity index 100% rename from patches/msvcp60-basic_string_wchar_dtor/definition rename to patches/msvcp90-basic_string_wchar_dtor/definition