we are seeing a Crash due to cross-DLL deallocation of std::string from 
static V8 library (CRT/heap ownership mismatch)

But this issue was never seen in earlier versions. we have not changed our 
code since many years.

is our assumption correct ? or is there anything changed in the latest 
version that we have take care of in our code.

*Environment*

OS: Windows 11

CPU architecture: x64

Compiler: *clang-cl*

MSVC toolchain: *Visual Studio 2022 (v143)*

V8 version / commit*: 14.3.127.17*

Build system: GN + Ninja

Build type: *Static library (v8_monolith.lib)*

 

*args.gn <http://args.gn/>:*
is_component_build = false

is_debug = false

target_cpu = "x64"

use_custom_libcxx = false

v8_monolithic = true

v8_use_external_startup_data = false

is_clang = false

clang_use_chrome_plugins = false

treat_warnings_as_errors = false

v8_enable_test_features=false

v8_enable_fast_torque = false

v8_enable_sandbox = false

v8_enable_pointer_compression = false

v8_enable_backtrace = false

v8_enable_disassembler = false

v8_enable_object_print = false

v8_enable_verify_heap = false

v8_enable_slow_dchecks = false

v8_enable_gdbjit = false

v8_enable_i18n_support = true

v8_monolithic_for_shared_library = true

v8_static_library = true

icu_use_data_file = false

v8_enable_temporal_support = false

use_sysroot = false

symbol_level = 0

strip_debug_info=true

dcheck_always_on = false

 

*Application:*

We use V8 to execute JavaScript, and on Windows the V8 library is *statically 
linked into our own DLL*.
The application was working correctly up to version *14.1.146.11*.
we were originally using V8 as a shared dll up to version  *13.0.x*, but 
later we had to switch to using the *static V8 library*, since shared DLL 
builds are not officially supported by V8 and we also migrated from *MSVC 
to clang-cl*.

 

As part of addressing security issues, we upgraded V8 to *14.3.127.17*. 
After this upgrade, we are seeing *frequent crashes inside our DLL*, and 
many of the crash stacks point to operations involving std::basic_string.

 

 


*Location:    *_CONSTEXPR20 ~basic_string() noexcept {

        *_Tidy_deallocate();  //crashes here*

#if _ITERATOR_DEBUG_LEVEL != 0

        auto&& _Alproxy          = _GET_PROXY_ALLOCATOR(_Alty, _Getal());

        const auto _To_delete    = _Mypair._Myval2._Myproxy;

        _Mypair._Myval2._Myproxy = nullptr;

        _Delete_plain_internal(_Alproxy, _To_delete);

#endif // _ITERATOR_DEBUG_LEVEL != 0

    }


 any inputs or pointers will be of great help.

Thank you for looking into this.

regards
Pradish

-- 
-- 
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- 
You received this message because you are subscribed to the Google Groups 
"v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/v8-dev/c53ce02a-769c-4787-a09c-b6fe74de5adcn%40googlegroups.com.

Reply via email to