Skip to content

wasm2c: stack overflow running on wasm2c with Windows 11 #2612

Open
@silbinarywolf

Description

@silbinarywolf

Wasm file

tsgo.zip

Building above Wasm file yourself

GOOS=wasip1 GOARCH=wasm go build -o tsgo.wasm

Error
Unhandled exception at 0x00007FF8116E08EE (msvcp140d.dll) in wasm2c.exe: 0xC00000FD: Stack overflow (parameters: 0x0000000000000001, 0x00000073D36D3FD8).

Screenshot
Image

Stack

 	msvcp140d.dll!00007ff8116e08ee()	Unknown
 	msvcp140d.dll!00007ff8116deb86()	Unknown
>	wasm2c.exe!std::vector<unsigned char,std::allocator<unsigned char>>::_Orphan_range_locked(unsigned char * _First, unsigned char * _Last) Line 2192	C++
 	wasm2c.exe!std::vector<unsigned char,std::allocator<unsigned char>>::_Orphan_range(unsigned char * _First, unsigned char * _Last) Line 2204	C++
 	wasm2c.exe!std::vector<unsigned char,std::allocator<unsigned char>>::_Resize<std::_Value_init_tag>(const unsigned __int64 _Newsize, const std::_Value_init_tag & _Val) Line 1606	C++
 	wasm2c.exe!std::vector<unsigned char,std::allocator<unsigned char>>::resize(const unsigned __int64 _Newsize) Line 1615	C++
 	wasm2c.exe!wabt::MemoryStream::WriteDataImpl(unsigned __int64 dst_offset, const void * src, unsigned __int64 size) Line 198	C++
 	wasm2c.exe!wabt::Stream::WriteDataAt(unsigned __int64 at, const void * src, unsigned __int64 size, const char * desc, wabt::PrintChars print_chars) Line 50	C++
 	wasm2c.exe!wabt::Stream::WriteData(const void * src, unsigned __int64 size, const char * desc, wabt::PrintChars print_chars) Line 58	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::WriteIndent() Line 1075	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::WriteData(const char * src, unsigned __int64 size) Line 1082	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(std::basic_string_view<char,std::char_traits<char>> s) Line 1120	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::`anonymous-namespace'::StackVar & sv) Line 1225	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write<wabt::`anonymous namespace'::StackVar,char const (&)[4],wabt::Var const &,char const (&)[2],wabt::A0x53a8590c::Newline>(wabt::`anonymous-namespace'::StackVar && t, const char[4] & u, const wabt::Var & <args_0>, const char[2] & <args_1>, wabt::`anonymous-namespace'::Newline && <args_2>) Line 324	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::intrusive_list<wabt::Expr> & exprs) Line 3766	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write<wabt::intrusive_list<wabt::Expr> const &,wabt::`anonymous namespace'::LabelDecl>(const wabt::intrusive_list<wabt::Expr> & t, wabt::`anonymous-namespace'::LabelDecl && u) Line 325	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::Block & block) Line 3330	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::intrusive_list<wabt::Expr> & exprs) Line 3599	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write<wabt::intrusive_list<wabt::Expr> const &,wabt::`anonymous namespace'::LabelDecl>(const wabt::intrusive_list<wabt::Expr> & t, wabt::`anonymous-namespace'::LabelDecl && u) Line 325	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::Block & block) Line 3330	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::intrusive_list<wabt::Expr> & exprs) Line 3599	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write<wabt::intrusive_list<wabt::Expr> const &,wabt::`anonymous namespace'::LabelDecl>(const wabt::intrusive_list<wabt::Expr> & t, wabt::`anonymous-namespace'::LabelDecl && u) Line 325	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::Block & block) Line 3330	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::intrusive_list<wabt::Expr> & exprs) Line 3599	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write<wabt::intrusive_list<wabt::Expr> const &,wabt::`anonymous namespace'::LabelDecl>(const wabt::intrusive_list<wabt::Expr> & t, wabt::`anonymous-namespace'::LabelDecl && u) Line 325	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::Block & block) Line 3330	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::intrusive_list<wabt::Expr> & exprs) Line 3599	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write<wabt::intrusive_list<wabt::Expr> const &,wabt::`anonymous namespace'::LabelDecl>(const wabt::intrusive_list<wabt::Expr> & t, wabt::`anonymous-namespace'::LabelDecl && u) Line 325	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::Block & block) Line 3330	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::intrusive_list<wabt::Expr> & exprs) Line 3599	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write<wabt::intrusive_list<wabt::Expr> const &,wabt::`anonymous namespace'::LabelDecl>(const wabt::intrusive_list<wabt::Expr> & t, wabt::`anonymous-namespace'::LabelDecl && u) Line 325	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::Block & block) Line 3330	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::intrusive_list<wabt::Expr> & exprs) Line 3599	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write<wabt::intrusive_list<wabt::Expr> const &,wabt::`anonymous namespace'::LabelDecl>(const wabt::intrusive_list<wabt::Expr> & t, wabt::`anonymous-namespace'::LabelDecl && u) Line 325	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::Block & block) Line 3330	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::intrusive_list<wabt::Expr> & exprs) Line 3599	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write<wabt::intrusive_list<wabt::Expr> const &,wabt::`anonymous namespace'::LabelDecl>(const wabt::intrusive_list<wabt::Expr> & t, wabt::`anonymous-namespace'::LabelDecl && u) Line 325	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::Block & block) Line 3330	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::intrusive_list<wabt::Expr> & exprs) Line 3599	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write<wabt::intrusive_list<wabt::Expr> const &,wabt::`anonymous namespace'::LabelDecl>(const wabt::intrusive_list<wabt::Expr> & t, wabt::`anonymous-namespace'::LabelDecl && u) Line 325	C++
 	wasm2c.exe!wabt::`anonymous namespace'::CWriter::Write(const wabt::Block & block) Line 3330	C++
        <keeps going>

Workaround I used:

Bumped the default stack size on Windows from 1mb to 8mb initially but that still crashed. So I bumped it to 58mb and then it worked without crashing.

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions