Description
It's bizarre to say the least. Take this C++/CLI code:
#include "pch.h"
using namespace System;
extern "C" __declspec(dllexport) void __stdcall foobar() {
Console::WriteLine("Hiya!");
try {
Console::WriteLine("Inside try");
System::String^ s = "System";
System::Reflection::Assembly^ a = System::Reflection::Assembly::Load(s);
Console::WriteLine(a->FullName);
Console::WriteLine(a->Location);
} catch (...) {
Console::WriteLine("Exception");
}
Console::WriteLine(System::Runtime::InteropServices::RuntimeInformation::FrameworkDescription);
}
Which I invoke from a plain C++ app:
#include <windows.h>
#include <iostream>
typedef void (__stdcall *f_funci)();
int main()
{
std::cout << "From C++" << std::endl;
HINSTANCE hGetProcIDDLL = LoadLibraryA("C:\\Users\\samcook\\source\\repos\\CppCliApp\\x64\\Debug\\CppCliApp.dll");
f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "foobar");
funci();
}
Every time this crashes the application. If I pass nullptr instead of "System" then the crash does not occur.
Reproduction Steps
Here is a zip file. You'll have the change the line in CppApp.cpp to point to the correct DLL.
CppCliApp.zip
> cd C:\Users\<user>\source\repos\CppCliApp
> msbuild -restore
> msbuild
> .\x64\Debug\CppApp.exe
The application will crash.
Expected behavior
No crash.
Actual behavior
Crash with stack trace:
coreclr.dll!__report_gsfailure(unsigned __int64 stack_cookie) Line 220
at D:\a\_work\1\s\src\vctools\crt\vcstartup\src\gs\gs_report.c(220)
[Inline Frame] coreclr.dll!DoJITFailFast() Line 3298
at D:\a\_work\1\s\src\coreclr\vm\jithelpers.cpp(3298)
coreclr.dll!CrawlFrame::CheckGSCookies() Line 363
at D:\a\_work\1\s\src\coreclr\vm\stackwalk.cpp(363)
[Inline Frame] coreclr.dll!StackFrameIterator::PreProcessingForManagedFrames() Line 3193
at D:\a\_work\1\s\src\coreclr\vm\stackwalk.cpp(3193)
[Inline Frame] coreclr.dll!StackFrameIterator::ProcessCurrentFrame() Line 3029
at D:\a\_work\1\s\src\coreclr\vm\stackwalk.cpp(3029)
coreclr.dll!StackFrameIterator::NextRaw() Line 2812
at D:\a\_work\1\s\src\coreclr\vm\stackwalk.cpp(2812)
[Inline Frame] coreclr.dll!StackFrameIterator::Next() Line 1623
at D:\a\_work\1\s\src\coreclr\vm\stackwalk.cpp(1623)
coreclr.dll!Thread::StackWalkFramesEx(REGDISPLAY * pRD, StackWalkAction(*)(CrawlFrame *, void *) pCallback, void * pData, unsigned int flags, Frame * pStartFrame) Line 917
at D:\a\_work\1\s\src\coreclr\vm\stackwalk.cpp(917)
coreclr.dll!Thread::StackWalkFrames(StackWalkAction(*)(CrawlFrame *, void *) pCallback, void * pData, unsigned int flags, Frame * pStartFrame) Line 992
at D:\a\_work\1\s\src\coreclr\vm\stackwalk.cpp(992)
coreclr.dll!SystemDomain::GetCallersModule(StackCrawlMark * stackMark) Line 1495
at D:\a\_work\1\s\src\coreclr\vm\appdomain.cpp(1495)
[Inline Frame] coreclr.dll!SystemDomain::GetCallersAssembly(StackCrawlMark *) Line 1511
at D:\a\_work\1\s\src\coreclr\vm\appdomain.cpp(1511)
coreclr.dll!AssemblyNative_InternalLoad(NativeAssemblyNameParts * pAssemblyNameParts, QCall::ObjectHandleOnStack requestingAssembly, QCall::StackCrawlMarkHandle stackMark, int fThrowOnFileNotFound, QCall::ObjectHandleOnStack assemblyLoadContext, QCall::ObjectHandleOnStack retAssembly) Line 64
at D:\a\_work\1\s\src\coreclr\vm\assemblynative.cpp(64)
System.Private.CoreLib.dll!00007ffcd06c41c3()
System.Private.CoreLib.dll!00007ffcd06b787c()
With locals:
+ cookie 0x0000002037bf6be0 {4359, 18725272692747} volatile unsigned __int64[2]
stack_cookie 0 unsigned __int64
Regression?
No response
Known Workarounds
No response
Configuration
Runtime: 9.0.0-rc.2.24473.5
SDK: 9.0.100-rc.2.24474.11
MSBuild: MSBuild version 17.11.9+a69bbaaf5 for .NET Framework 17.11.9.46202
Other information
No response
Description
It's bizarre to say the least. Take this C++/CLI code:
Which I invoke from a plain C++ app:
Every time this crashes the application. If I pass
nullptrinstead of"System"then the crash does not occur.Reproduction Steps
Here is a zip file. You'll have the change the line in
CppApp.cppto point to the correct DLL.CppCliApp.zip
The application will crash.
Expected behavior
No crash.
Actual behavior
Crash with stack trace:
With locals:
Regression?
No response
Known Workarounds
No response
Configuration
Runtime: 9.0.0-rc.2.24473.5
SDK: 9.0.100-rc.2.24474.11
MSBuild: MSBuild version 17.11.9+a69bbaaf5 for .NET Framework 17.11.9.46202
Other information
No response