From ea4467178706c95d2f3f218b2facd9ddad7fe93b Mon Sep 17 00:00:00 2001 From: "ws77.cho" Date: Wed, 14 Dec 2022 01:26:35 +0900 Subject: [PATCH] Fix memory leaks reported by static analyzer (#78492) --- src/coreclr/ilasm/assembler.cpp | 5 +++++ src/coreclr/pal/src/thread/process.cpp | 1 + src/coreclr/tools/superpmi/mcs/verbconcat.cpp | 3 +++ src/coreclr/tools/superpmi/superpmi/parallelsuperpmi.cpp | 4 ++++ 4 files changed, 13 insertions(+) diff --git a/src/coreclr/ilasm/assembler.cpp b/src/coreclr/ilasm/assembler.cpp index 6984c18037587..e5fd070b97348 100644 --- a/src/coreclr/ilasm/assembler.cpp +++ b/src/coreclr/ilasm/assembler.cpp @@ -2737,4 +2737,9 @@ void Assembler::EmitGenericParamConstraints(int numTyPars, TyParDescr* pTyPars, pGPC->Token(tkOwnerOfCA); EmitCustomAttributes(tkOwnerOfCA, pGPC->CAList()); } + + delete[] nConstraintsArr; + delete[] nConstraintIndexArr; + delete[] pConstraintsArr; + delete[] pGPConstraintsArr; } diff --git a/src/coreclr/pal/src/thread/process.cpp b/src/coreclr/pal/src/thread/process.cpp index 29b82b69d383f..4b761fefb802f 100644 --- a/src/coreclr/pal/src/thread/process.cpp +++ b/src/coreclr/pal/src/thread/process.cpp @@ -3651,6 +3651,7 @@ buildArgv( (strcat_s(lpAsciiCmdLine, iLength, " ") != SAFECRT_SUCCESS)) { ERROR("strcpy_s/strcat_s failed!\n"); + free(lpAsciiCmdLine); return NULL; } diff --git a/src/coreclr/tools/superpmi/mcs/verbconcat.cpp b/src/coreclr/tools/superpmi/mcs/verbconcat.cpp index 5536c62f03add..9d6f7b39c0e29 100644 --- a/src/coreclr/tools/superpmi/mcs/verbconcat.cpp +++ b/src/coreclr/tools/superpmi/mcs/verbconcat.cpp @@ -61,6 +61,7 @@ int verbConcat::DoWork(const char* nameOfFile1, const char* nameOfFile2) if (res == 0) { LogError("Failed to read '%s' from offset %lld. GetLastError()=%u", nameOfFile2, offset, GetLastError()); + delete[] buffer; return -1; } DWORD bytesWritten = -1; @@ -68,11 +69,13 @@ int verbConcat::DoWork(const char* nameOfFile1, const char* nameOfFile2) if (res2 == 0) { LogError("Failed to write '%s' at offset %lld. GetLastError()=%u", nameOfFile1, offset, GetLastError()); + delete[] buffer; return -1; } if (bytesRead != bytesWritten) { LogError("Failed to read/write matching bytes %u!=%u", bytesRead, bytesWritten); + delete[] buffer; return -1; } } diff --git a/src/coreclr/tools/superpmi/superpmi/parallelsuperpmi.cpp b/src/coreclr/tools/superpmi/superpmi/parallelsuperpmi.cpp index c3dc26501f1dc..fe798f9bc6709 100644 --- a/src/coreclr/tools/superpmi/superpmi/parallelsuperpmi.cpp +++ b/src/coreclr/tools/superpmi/superpmi/parallelsuperpmi.cpp @@ -395,6 +395,10 @@ static void MergeWorkerMCLs(char* mclFilename, PerWorkerData* workerData, int wo // Write the merged MCL array back to disk if (!WriteArrayToMCL(mclFilename, mergedMCL, totalCount)) LogError("Unable to write to MCL file %s.", mclFilename); + + delete[] MCL; + delete[] MCLCount; + delete[] mergedMCL; } static void MergeWorkerCsvs(char* csvFilename, PerWorkerData* workerData, int workerCount, char* PerWorkerData::* csvPath)