[PATCH] msvcp90: Fix segfault in bad_alloc exception default constructor.

Torge Matthies tmatthies at codeweavers.com
Tue Jun 7 03:30:07 CDT 2022


Signed-off-by: Torge Matthies <tmatthies at codeweavers.com>
---
EXCEPTION_NAME needs a pointer variable passed in, not an array.
I removed the cast from the macro so that in the future a warning
is displayed if this happens again.

 dlls/msvcp90/exception.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/dlls/msvcp90/exception.c b/dlls/msvcp90/exception.c
index 7f1dfd2188a1..effe57063a14 100644
--- a/dlls/msvcp90/exception.c
+++ b/dlls/msvcp90/exception.c
@@ -36,7 +36,7 @@ int* __cdecl __processing_throw(void);
 #if _MSVCP_VER >= 70 || defined(_MSVCIRT)
 typedef const char **exception_name;
 #define EXCEPTION_STR(name) (*name)
-#define EXCEPTION_NAME(str) ((exception_name)&str)
+#define EXCEPTION_NAME(str) (&str)
 #else
 typedef const char *exception_name;
 #define EXCEPTION_STR(name) (name)
@@ -96,7 +96,7 @@ exception* __thiscall exception_copy_ctor(exception *this, const exception *rhs)
         this->name = rhs->name;
         this->do_free = FALSE;
     } else
-        MSVCP_exception_ctor(this, EXCEPTION_NAME(rhs->name));
+        MSVCP_exception_ctor(this, (exception_name)EXCEPTION_NAME(rhs->name));
     TRACE("name = %s\n", this->name);
     return this;
 }
@@ -214,7 +214,7 @@ bad_alloc* __thiscall MSVCP_bad_alloc_ctor(bad_alloc *this, exception_name name)
 DEFINE_THISCALL_WRAPPER(MSVCP_bad_alloc_default_ctor, 4)
 bad_alloc* __thiscall MSVCP_bad_alloc_default_ctor(bad_alloc *this)
 {
-    static const char name[] = "bad allocation";
+    static const char *name = "bad allocation";
     return MSVCP_bad_alloc_ctor(this, EXCEPTION_NAME(name));
 }
 
-- 
2.36.1




More information about the wine-devel mailing list