From c2a63029edb5dbc051474a3855a8364e000ddbe5 Mon Sep 17 00:00:00 2001 From: Boxuan Li Date: Mon, 26 Aug 2024 09:56:00 -0700 Subject: [PATCH 1/3] locale0.cpp: Protect memory integrity of _Fac_node --- stl/src/locale0.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/stl/src/locale0.cpp b/stl/src/locale0.cpp index e25897acc9a..d03cf3e654d 100644 --- a/stl/src/locale0.cpp +++ b/stl/src/locale0.cpp @@ -43,6 +43,18 @@ struct _Fac_node { // node for lazy facet recording void operator delete(void* _Ptr) noexcept { // replace operator delete _free_dbg(_Ptr, _CRT_BLOCK); } +#else + void* operator new(size_t _Size) { // ensure operator new is not tainted by global replacement, if any + void* _Ptr = malloc(_Size); + if (!_Ptr) { + _Xbad_alloc(); + } + + return _Ptr; + } + void operator delete(void* _Ptr) noexcept { // ensure operator new is not tainted by global replacement, if any + free(_Ptr); + } #endif // defined(_DEBUG) _Fac_node* _Next; From c64d0ef73b9586348df4116c25d1e06b74a87bc4 Mon Sep 17 00:00:00 2001 From: Boxuan Li Date: Mon, 26 Aug 2024 10:11:50 -0700 Subject: [PATCH 2/3] Update locale0.cpp Add blank line --- stl/src/locale0.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/stl/src/locale0.cpp b/stl/src/locale0.cpp index d03cf3e654d..289f4bb21f8 100644 --- a/stl/src/locale0.cpp +++ b/stl/src/locale0.cpp @@ -52,6 +52,7 @@ struct _Fac_node { // node for lazy facet recording return _Ptr; } + void operator delete(void* _Ptr) noexcept { // ensure operator new is not tainted by global replacement, if any free(_Ptr); } From 16a211061f8ca18b8dda0105db7d52b2773b11b0 Mon Sep 17 00:00:00 2001 From: Casey Carter Date: Mon, 26 Aug 2024 10:52:00 -0700 Subject: [PATCH 3/3] simplify --- stl/src/locale0.cpp | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/stl/src/locale0.cpp b/stl/src/locale0.cpp index 289f4bb21f8..74ef152f0c3 100644 --- a/stl/src/locale0.cpp +++ b/stl/src/locale0.cpp @@ -30,7 +30,6 @@ struct _Fac_node { // node for lazy facet recording delete _Facptr->_Decref(); } -#ifdef _DEBUG void* operator new(size_t _Size) { // replace operator new void* _Ptr = _malloc_dbg(_Size > 0 ? _Size : 1, _CRT_BLOCK, __FILE__, __LINE__); if (!_Ptr) { @@ -43,20 +42,6 @@ struct _Fac_node { // node for lazy facet recording void operator delete(void* _Ptr) noexcept { // replace operator delete _free_dbg(_Ptr, _CRT_BLOCK); } -#else - void* operator new(size_t _Size) { // ensure operator new is not tainted by global replacement, if any - void* _Ptr = malloc(_Size); - if (!_Ptr) { - _Xbad_alloc(); - } - - return _Ptr; - } - - void operator delete(void* _Ptr) noexcept { // ensure operator new is not tainted by global replacement, if any - free(_Ptr); - } -#endif // defined(_DEBUG) _Fac_node* _Next; _Facet_base* _Facptr;