From 28b54e9ef7897cbc7783a5bcde2fd26b217ec47a Mon Sep 17 00:00:00 2001 From: "roc+%cs.cmu.edu" Date: Mon, 25 Feb 2008 01:16:41 +0000 Subject: [PATCH] Bug 417903. Don't crash if _SymGetLineFromAddr64 fails. r=benjamin,a=beltzner git-svn-id: svn://10.0.0.236/trunk@246423 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/xpcom/base/nsStackWalk.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/mozilla/xpcom/base/nsStackWalk.cpp b/mozilla/xpcom/base/nsStackWalk.cpp index a8bc5b9c855..5a2059e35eb 100644 --- a/mozilla/xpcom/base/nsStackWalk.cpp +++ b/mozilla/xpcom/base/nsStackWalk.cpp @@ -909,6 +909,10 @@ BOOL SymGetModuleInfoEspecial64(HANDLE aProcess, DWORD64 aAddr, PIMAGEHLP_MODULE DWORD displacement = 0; BOOL lineRes = FALSE; lineRes = _SymGetLineFromAddr64(aProcess, aAddr, &displacement, aLineInfo); + if (!lineRes) { + // Clear out aLineInfo to indicate that it's not valid + memset(aLineInfo, 0, sizeof(*aLineInfo)); + } } return retval; @@ -984,9 +988,12 @@ NS_DescribeCodeAddress(void *aPC, nsCodeAddressDetails *aDetails) PL_strncpyz(aDetails->library, modInfo.ModuleName, sizeof(aDetails->library)); aDetails->loffset = (char*) aPC - (char*) modInfo.BaseOfImage; - PL_strncpyz(aDetails->filename, lineInfo.FileName, - sizeof(aDetails->filename)); - aDetails->lineno = lineInfo.LineNumber; + + if (lineInfo.FileName) { + PL_strncpyz(aDetails->filename, lineInfo.FileName, + sizeof(aDetails->filename)); + aDetails->lineno = lineInfo.LineNumber; + } } ULONG64 buffer[(sizeof(SYMBOL_INFO) +