From 9e1449a4de5c77aa2cb5ee160855f9b25039efff Mon Sep 17 00:00:00 2001 From: Foxtr0t1337 <48181014+Foxtr0t1337@users.noreply.github.com> Date: Sat, 22 Jun 2024 23:44:28 +0800 Subject: [PATCH] MachOModule.cs add bound check `ReadSymbolTable()` will use `DataReader.Read()` If `_symtab.NSyms` is `0` but it passed previous checks, `Read()` will assert. Didn't remove the assert but add this check. I don't know why but in a game some modules will cause the assert. --- src/Microsoft.Diagnostics.Runtime/MacOS/MachOModule.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.Diagnostics.Runtime/MacOS/MachOModule.cs b/src/Microsoft.Diagnostics.Runtime/MacOS/MachOModule.cs index faf5a0675..2ae5ec827 100644 --- a/src/Microsoft.Diagnostics.Runtime/MacOS/MachOModule.cs +++ b/src/Microsoft.Diagnostics.Runtime/MacOS/MachOModule.cs @@ -180,6 +180,9 @@ internal string ReadAscii(ulong address, int max) if (_dysymtab.Header.Kind != LoadCommandType.DysymTab || _symtab.Header.Kind != LoadCommandType.SymTab) return null; + if (_symtab.NSyms == 0) + return null; + ulong symbolTableAddress = GetAddressFromFileOffset(_symtab.SymOff); NList64[] symTable = new NList64[_symtab.NSyms]; @@ -215,4 +218,4 @@ public IEnumerable EnumerateSegments() } } } -} \ No newline at end of file +}