From 9bffa661bda23f5d9f3e5f1e7cc4b73f77f5ea1f Mon Sep 17 00:00:00 2001 From: Mike McLaughlin Date: Thu, 25 Jul 2024 18:11:46 -0700 Subject: [PATCH 1/2] Fix issue 98506 - Excessive exceptions generated in StackTraceSymbols --- .../src/System/Diagnostics/StackTraceSymbols.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Diagnostics.StackTrace/src/System/Diagnostics/StackTraceSymbols.cs b/src/libraries/System.Diagnostics.StackTrace/src/System/Diagnostics/StackTraceSymbols.cs index 54ea3b7786a66..102e3cdb3de0a 100644 --- a/src/libraries/System.Diagnostics.StackTrace/src/System/Diagnostics/StackTraceSymbols.cs +++ b/src/libraries/System.Diagnostics.StackTrace/src/System/Diagnostics/StackTraceSymbols.cs @@ -63,7 +63,7 @@ internal void GetSourceLineInfo(Assembly assembly, string assemblyPath, IntPtr l { Handle handle = MetadataTokens.Handle(methodToken); - if (handle.Kind == HandleKind.MethodDefinition) + if (!handle.IsNil && handle.Kind == HandleKind.MethodDefinition) { MethodDebugInformationHandle methodDebugHandle = ((MethodDefinitionHandle)handle).ToDebugInformationHandle(); MethodDebugInformation methodInfo = reader.GetMethodDebugInformation(methodDebugHandle); From 1ab284b2b8d55941526d79371423aaa0d0eff704 Mon Sep 17 00:00:00 2001 From: Mike McLaughlin Date: Thu, 25 Jul 2024 20:10:29 -0700 Subject: [PATCH 2/2] Code review feedback --- .../src/System/Diagnostics/StackTraceSymbols.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/libraries/System.Diagnostics.StackTrace/src/System/Diagnostics/StackTraceSymbols.cs b/src/libraries/System.Diagnostics.StackTrace/src/System/Diagnostics/StackTraceSymbols.cs index 102e3cdb3de0a..fa2ee8018ba38 100644 --- a/src/libraries/System.Diagnostics.StackTrace/src/System/Diagnostics/StackTraceSymbols.cs +++ b/src/libraries/System.Diagnostics.StackTrace/src/System/Diagnostics/StackTraceSymbols.cs @@ -58,12 +58,11 @@ internal void GetSourceLineInfo(Assembly assembly, string assemblyPath, IntPtr l sourceLine = 0; sourceColumn = 0; - MetadataReader? reader = TryGetReader(assembly, assemblyPath, loadedPeAddress, loadedPeSize, isFileLayout, inMemoryPdbAddress, inMemoryPdbSize); - if (reader != null) + Handle handle = MetadataTokens.Handle(methodToken); + if (!handle.IsNil && handle.Kind == HandleKind.MethodDefinition) { - Handle handle = MetadataTokens.Handle(methodToken); - - if (!handle.IsNil && handle.Kind == HandleKind.MethodDefinition) + MetadataReader? reader = TryGetReader(assembly, assemblyPath, loadedPeAddress, loadedPeSize, isFileLayout, inMemoryPdbAddress, inMemoryPdbSize); + if (reader != null) { MethodDebugInformationHandle methodDebugHandle = ((MethodDefinitionHandle)handle).ToDebugInformationHandle(); MethodDebugInformation methodInfo = reader.GetMethodDebugInformation(methodDebugHandle);