From c423474ad7d657f4f0cab4c68cbd82a582aeee2a Mon Sep 17 00:00:00 2001 From: ds5678 <49847914+ds5678@users.noreply.github.com> Date: Fri, 27 Feb 2026 22:35:01 -0800 Subject: [PATCH] Support null indices when the index is 32 bits --- LibCpp2IL/Metadata/Il2CppMetadata.cs | 3 ++- LibCpp2IL/Metadata/Il2CppVariableWidthIndex.cs | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/LibCpp2IL/Metadata/Il2CppMetadata.cs b/LibCpp2IL/Metadata/Il2CppMetadata.cs index 58139377..b5a389ed 100644 --- a/LibCpp2IL/Metadata/Il2CppMetadata.cs +++ b/LibCpp2IL/Metadata/Il2CppMetadata.cs @@ -420,7 +420,8 @@ private Il2CppMetadata(MemoryStream stream, UnityVersion unityVersion, float met foreach (var il2CppFieldDefaultValue in fieldDefaultValues) { _fieldDefaultValueLookup[il2CppFieldDefaultValue.fieldIndex] = il2CppFieldDefaultValue; - _fieldDefaultLookupNew[GetFieldDefinitionFromIndex(il2CppFieldDefaultValue.fieldIndex)] = il2CppFieldDefaultValue; + if (il2CppFieldDefaultValue.fieldIndex.IsNonNull) + _fieldDefaultLookupNew[GetFieldDefinitionFromIndex(il2CppFieldDefaultValue.fieldIndex)] = il2CppFieldDefaultValue; } LibLogger.VerboseNewline($"OK ({(DateTime.Now - start).TotalMilliseconds} ms)"); diff --git a/LibCpp2IL/Metadata/Il2CppVariableWidthIndex.cs b/LibCpp2IL/Metadata/Il2CppVariableWidthIndex.cs index e4bb306b..ab9b3d7d 100644 --- a/LibCpp2IL/Metadata/Il2CppVariableWidthIndex.cs +++ b/LibCpp2IL/Metadata/Il2CppVariableWidthIndex.cs @@ -71,7 +71,10 @@ public static Il2CppVariableWidthIndex Read(ClassReadingBinaryReader reader) return Null; return new(val2); case 4: - return new(reader.ReadInt32()); + var val3 = reader.ReadInt32(); + if (val3 == int.MaxValue) + return Null; + return new(val3); default: throw new Exception($"Invalid width {widthForThisTypeOnCurrentApplication} for Il2CppVariableWidthIndex of type {typeof(T)}."); }