From 1a243db4e147562912545125bfb382640143a82d Mon Sep 17 00:00:00 2001 From: Lee Culver Date: Sat, 14 Feb 2026 12:15:46 -0500 Subject: [PATCH] Fix sign extension bug in clrstack -l for ushort values (issue #5218) Both ShowLocals switch statements in strike.cpp cast 2-byte values to signed 'short' before assigning to ULONG64, causing sign extension for values >= 0x8000. Change both to 'unsigned short' to match the unsigned types used in cases 1, 4, 8. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/SOS/Strike/strike.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SOS/Strike/strike.cpp b/src/SOS/Strike/strike.cpp index 0e9b8b3f78..adfb98b5d0 100644 --- a/src/SOS/Strike/strike.cpp +++ b/src/SOS/Strike/strike.cpp @@ -11400,7 +11400,7 @@ class ClrStackImpl switch(tmp) { case 1: outVar = *((BYTE *)pByte.GetPtr()); break; - case 2: outVar = *((short *)pByte.GetPtr()); break; + case 2: outVar = *((unsigned short *)pByte.GetPtr()); break; case 4: outVar = *((DWORD *)pByte.GetPtr()); break; case 8: outVar = *((ULONG64 *)pByte.GetPtr()); break; default: outVar = 0; @@ -11492,7 +11492,7 @@ class ClrStackImpl switch(dwSize) { case 1: outVar = *((BYTE *) pByte.GetPtr()); break; - case 2: outVar = *((short *) pByte.GetPtr()); break; + case 2: outVar = *((unsigned short *) pByte.GetPtr()); break; case 4: outVar = *((DWORD *) pByte.GetPtr()); break; case 8: outVar = *((ULONG64 *) pByte.GetPtr()); break; default: outVar = 0;