-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Closed
Closed
Copy link
Labels
area-ExceptionHandling-coreclrin-prThere is an active PR which will close this issue when it is mergedThere is an active PR which will close this issue when it is merged
Milestone
Description
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.
> 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
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area-ExceptionHandling-coreclrin-prThere is an active PR which will close this issue when it is mergedThere is an active PR which will close this issue when it is merged