From c2a9aacceae0b6bf6861673c2fe45652115ee1e2 Mon Sep 17 00:00:00 2001 From: Jason Feng Date: Fri, 15 Jul 2022 11:43:47 -0400 Subject: [PATCH] NPE extended message generation missed j9mem_free_memory calls Signed-off-by: Jason Feng --- runtime/j9vm/javanextvmi.c | 5 +++++ runtime/vm/extendedMessageNPE.cpp | 27 +++++++++++++++++---------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/runtime/j9vm/javanextvmi.c b/runtime/j9vm/javanextvmi.c index 8f5d45847ad..497b351c11b 100644 --- a/runtime/j9vm/javanextvmi.c +++ b/runtime/j9vm/javanextvmi.c @@ -156,6 +156,11 @@ JVM_GetExtendedNPEMessage(JNIEnv *env, jthrowable throwableObj) } j9mem_free_memory(npeMsg); } + j9mem_free_memory(npeMsgData.liveStack); + j9mem_free_memory(npeMsgData.bytecodeOffset); + j9mem_free_memory(npeMsgData.bytecodeMap); + j9mem_free_memory(npeMsgData.stackMaps); + j9mem_free_memory(npeMsgData.unwalkedQueue); } else { Trc_SC_GetExtendedNPEMessage_Null_NPE_MSG(vmThread, userData.romClass, userData.romMethod, userData.bytecodeOffset); } diff --git a/runtime/vm/extendedMessageNPE.cpp b/runtime/vm/extendedMessageNPE.cpp index 0c13177cdbb..f18b404ef14 100644 --- a/runtime/vm/extendedMessageNPE.cpp +++ b/runtime/vm/extendedMessageNPE.cpp @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020, 2021 IBM Corp. and others + * Copyright (c) 2020, 2022 IBM Corp. and others * * This program and the accompanying materials are made available under * the terms of the Eclipse Public License 2.0 which accompanies this @@ -798,6 +798,10 @@ computeNPEMsgAtPC(J9VMThread *vmThread, J9ROMMethod *romMethod, J9ROMClass *romC PORT_ACCESS_FROM_VMC(vmThread); Trc_VM_ComputeNPEMsgAtPC_Entry(vmThread, romClass, romMethod, temps, bytecodeOffset, bcCurrent, npePC, npeFinalFlag, *isMethodFlag, *npeMsg); + if (NULL != *npeMsg) { + j9mem_free_memory(*npeMsg); + *npeMsg = NULL; + } if ((bcCurrent >= JBiconstm1) && (bcCurrent <= JBdconst1)) { /* * JBiconstm1, JBiconst0, JBiconst1, JBiconst2, JBiconst3, JBiconst4, JBiconst5 @@ -903,7 +907,7 @@ computeNPEMsgAtPC(J9VMThread *vmThread, J9ROMMethod *romMethod, J9ROMClass *romC UDATA objectrefPos = bytecodeOffset[npePC].first; if (BYTECODE_BRANCH_TARGET == objectrefPos) { - *npeMsg = NULL; + /* *npeMsg is NULL */ } else { computeNPEMsgAtPC(vmThread, romMethod, romClass, objectrefPos, false, npeMsg, isMethodFlag, temps, bytecodeOffset); } @@ -1024,7 +1028,7 @@ computeNPEMsgAtPC(J9VMThread *vmThread, J9ROMMethod *romMethod, J9ROMClass *romC if ((BYTECODE_BRANCH_TARGET == bcCausePos) || (BYTECODE_BRANCH_TARGET == bcCausePos2) ) { - *npeMsg = NULL; + /* *npeMsg is NULL */ } else { computeNPEMsgAtPC(vmThread, romMethod, romClass, bcCausePos, false, npeMsg, isMethodFlag, temps, bytecodeOffset); } @@ -1041,30 +1045,32 @@ computeNPEMsgAtPC(J9VMThread *vmThread, J9ROMMethod *romMethod, J9ROMClass *romC case JBaaload: { UDATA bcCausePos = bytecodeOffset[npePC].first; - const char* npeMsgObjref = NULL; + char *npeMsgObjref = NULL; UDATA aaloadIndexPos = 0; if (BYTECODE_BRANCH_TARGET == bcCausePos) { if (!npeFinalFlag) { - npeMsgObjref = ""; + npeMsgObjref = getMsgWithAllocation(vmThread, ""); } } else { - computeNPEMsgAtPC(vmThread, romMethod, romClass, bcCausePos, false, (char **)&npeMsgObjref, isMethodFlag, temps, bytecodeOffset); + computeNPEMsgAtPC(vmThread, romMethod, romClass, bcCausePos, false, &npeMsgObjref, isMethodFlag, temps, bytecodeOffset); } aaloadIndexPos = bytecodeOffset[npePC].second; if (npeFinalFlag || (NULL == npeMsgObjref)) { - *npeMsg = (char *)npeMsgObjref; + *npeMsg = npeMsgObjref; } else { - const char* npeMsgIndex = NULL; + char *npeMsgIndex = NULL; if (BYTECODE_BRANCH_TARGET == aaloadIndexPos) { - npeMsgIndex = "..."; + npeMsgIndex = getMsgWithAllocation(vmThread, "..."); } else { - computeNPEMsgAtPC(vmThread, romMethod, romClass, aaloadIndexPos, false, (char **)&npeMsgIndex, isMethodFlag, temps, bytecodeOffset); + computeNPEMsgAtPC(vmThread, romMethod, romClass, aaloadIndexPos, false, &npeMsgIndex, isMethodFlag, temps, bytecodeOffset); } if (NULL != npeMsgIndex) { *npeMsg = getMsgWithAllocation(vmThread, "%s[%s]", npeMsgObjref, npeMsgIndex); *isMethodFlag = false; + j9mem_free_memory(npeMsgIndex); } + j9mem_free_memory(npeMsgObjref); } break; } @@ -1101,6 +1107,7 @@ computeNPEMsgAtPC(J9VMThread *vmThread, J9ROMMethod *romMethod, J9ROMClass *romC *npeMsg = getMsgWithAllocation(vmThread, "%.*s", J9UTF8_LENGTH(fieldName), J9UTF8_DATA(fieldName)); } else { *npeMsg = getMsgWithAllocation(vmThread, "%s.%.*s", npeMsgObjref, J9UTF8_LENGTH(fieldName), J9UTF8_DATA(fieldName)); + j9mem_free_memory(npeMsgObjref); } *isMethodFlag = false; }