summaryrefslogtreecommitdiff
path: root/src/vm
diff options
context:
space:
mode:
authorAdeel Mujahid <adeelbm@outlook.com>2019-04-30 22:35:34 +0300
committerJan Kotas <jkotas@microsoft.com>2019-04-30 12:35:34 -0700
commitcdc344f7475e9e193b6bf7a454f5782b4d793be8 (patch)
treedb2add1b6dce76fac454ee076fb918aa350b942d /src/vm
parent0555dafead1c0362eb0a43a39c0f602e8b79ba56 (diff)
downloadcoreclr-cdc344f7475e9e193b6bf7a454f5782b4d793be8.tar.gz
coreclr-cdc344f7475e9e193b6bf7a454f5782b4d793be8.tar.bz2
coreclr-cdc344f7475e9e193b6bf7a454f5782b4d793be8.zip
Compute sizeof array instead of pointer (#24288)
* Compute sizeof array instead of pointer * Consolidate element count in dumpStack
Diffstat (limited to 'src/vm')
-rw-r--r--src/vm/debughelp.cpp19
-rw-r--r--src/vm/frames.h5
2 files changed, 14 insertions, 10 deletions
diff --git a/src/vm/debughelp.cpp b/src/vm/debughelp.cpp
index aa52a184f4..6f46d0a3a6 100644
--- a/src/vm/debughelp.cpp
+++ b/src/vm/debughelp.cpp
@@ -461,6 +461,7 @@ int dumpStack(BYTE* topOfStack, unsigned len)
int nLen = MAX_CLASSNAME_LENGTH * 4 + 400; // this should be enough
wchar_t *buff = (wchar_t *) qb.AllocThrows(nLen * sizeof(wchar_t));
+ wchar_t *buffEnd = buff + nLen;
while (ptr < end)
{
@@ -476,7 +477,7 @@ int dumpStack(BYTE* topOfStack, unsigned len)
if (isRetAddr((TADDR)*ptr, &whereCalled))
{
- if (_snwprintf_s(buffPtr, buff+NumItems(buff)-buffPtr-1, _TRUNCATE, W("STK[%08X] = %08X "), (size_t)ptr, *ptr) <0)
+ if (_snwprintf_s(buffPtr, buffEnd - buffPtr, _TRUNCATE, W("STK[%08X] = %08X "), (size_t)ptr, *ptr) < 0)
{
return(0);
}
@@ -519,7 +520,7 @@ int dumpStack(BYTE* topOfStack, unsigned len)
ftn = ExecutionManager::GetCodeMethodDesc((PCODE)(*ptr));
}
- if(_snwprintf_s(buffPtr, buff+ nLen -buffPtr-1, _TRUNCATE, W("%s "), kind) < 0)
+ if (_snwprintf_s(buffPtr, buffEnd - buffPtr, _TRUNCATE, W("%s "), kind) < 0)
{
return(0);
}
@@ -529,7 +530,7 @@ int dumpStack(BYTE* topOfStack, unsigned len)
if (ftn != 0)
{
// buffer is not large enough
- if( formatMethodDesc(ftn, buffPtr, static_cast<DWORD>(buff+ nLen -buffPtr-1)) == NULL)
+ if (formatMethodDesc(ftn, buffPtr, static_cast<DWORD>(buffEnd - buffPtr)) == NULL)
{
return(0);
}
@@ -538,13 +539,13 @@ int dumpStack(BYTE* topOfStack, unsigned len)
}
else
{
- wcsncpy_s(buffPtr, nLen - (buffPtr - buff), W("<UNKNOWN FTN>"), _TRUNCATE);
+ wcsncpy_s(buffPtr, buffEnd - buffPtr, W("<UNKNOWN FTN>"), _TRUNCATE);
buffPtr += wcslen(buffPtr);
}
if (whereCalled != 0)
{
- if(_snwprintf_s(buffPtr, buff+ nLen -buffPtr-1, _TRUNCATE, W(" Caller called Entry %X"), whereCalled) <0)
+ if (_snwprintf_s(buffPtr, buffEnd - buffPtr, _TRUNCATE, W(" Caller called Entry %X"), whereCalled) < 0)
{
return(0);
}
@@ -552,7 +553,7 @@ int dumpStack(BYTE* topOfStack, unsigned len)
buffPtr += wcslen(buffPtr);
}
- wcsncpy_s(buffPtr, nLen - (buffPtr - buff), W("\n"), _TRUNCATE);
+ wcsncpy_s(buffPtr, buffEnd - buffPtr, W("\n"), _TRUNCATE);
buffPtr += wcslen(buffPtr);
WszOutputDebugString(buff);
}
@@ -561,21 +562,21 @@ int dumpStack(BYTE* topOfStack, unsigned len)
if (pMT != 0)
{
buffPtr = buff;
- if( _snwprintf_s(buffPtr, buff+ nLen -buffPtr-1, _TRUNCATE, W("STK[%08X] = %08X MT PARAM "), (size_t)ptr, *ptr ) <0)
+ if ( _snwprintf_s(buffPtr, buffEnd - buffPtr, _TRUNCATE, W("STK[%08X] = %08X MT PARAM "), (size_t)ptr, *ptr ) < 0)
{
return(0);
}
buffPtr += wcslen(buffPtr);
- if( formatMethodTable(pMT, buffPtr, static_cast<DWORD>(buff+ nLen -buffPtr-1)) == NULL)
+ if (formatMethodTable(pMT, buffPtr, static_cast<DWORD>(buffEnd - buffPtr)) == NULL)
{
return(0);
}
buffPtr += wcslen(buffPtr);
- wcsncpy_s(buffPtr, nLen - (buffPtr - buff), W("\n"), _TRUNCATE);
+ wcsncpy_s(buffPtr, buffEnd - buffPtr, W("\n"), _TRUNCATE);
WszOutputDebugString(buff);
}
diff --git a/src/vm/frames.h b/src/vm/frames.h
index d219ac30a5..434569fe84 100644
--- a/src/vm/frames.h
+++ b/src/vm/frames.h
@@ -3610,9 +3610,12 @@ public:
if (true) { DEBUG_ASSURE_NO_RETURN_BEGIN(GCPROTECT)
#define GCPROTECT_BEGININTERIOR(ObjRefStruct) do { \
+ /* work around Wsizeof-pointer-div warning as we */ \
+ /* mean to capture pointer or object size */ \
+ UINT subjectSize = sizeof(ObjRefStruct); \
FrameWithCookie<GCFrame> __gcframe( \
(OBJECTREF*)&(ObjRefStruct), \
- sizeof(ObjRefStruct)/sizeof(OBJECTREF), \
+ subjectSize/sizeof(OBJECTREF), \
TRUE); \
/* work around unreachable code warning */ \
if (true) { DEBUG_ASSURE_NO_RETURN_BEGIN(GCPROTECT)