Avoid accidentally (indirectly) reading PlatformHelper.Current before setting it (#1254)

This commit is contained in:
The0x539 authored and GitHub committed 2026-01-27 15:26:39 +01:00
1 parent dd0655fe9d
commit 0d275a4df3
1 file changed
+6 -1
+6 -1
View File
@@ -80,7 +80,12 @@ internal static class PlatformUtils
if (wineGetVersion != IntPtr.Zero)
{
current |= Platform.Wine;
var getVersion = wineGetVersion.AsDelegate<GetWineVersionDelegate>();
// It's not safe to use the AsDelegate() extension method here because:
// - It comes from the MonoMod.Utils.DynDll class, defined in MonoMod.Common.
// - The DynDll class has a static constructor that reads PlatformHelper.Current.
// - Reading from that property freezes it: subsequent writes will throw an exception.
// - This method only sets PlatformHelper.Current at the very end.
var getVersion = Marshal.GetDelegateForFunctionPointer(wineGetVersion, typeof(GetWineVersionDelegate)) as GetWineVersionDelegate;
WineVersion = getVersion();
}
}