Skip to content

Commit 7aa8981

Browse files
author
Atul Katti
committed
[MERGE #5475 @atulkatti] MSFT:18262249 Make sure the parser temp guest arena is released in child module parsing error cases as well.
Merge pull request #5475 from atulkatti:Bug18262249.ModuleLoadParserArenaLeak.1
2 parents 6b5190f + 3356597 commit 7aa8981

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

lib/Runtime/Language/SourceTextModuleRecord.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,14 @@ namespace Js
251251
SetLocalExportRecordList(moduleParseNode->localExportEntries);
252252
}
253253

254+
void SourceTextModuleRecord::ReleaseParserResources()
255+
{
256+
if (this->parser != nullptr)
257+
{
258+
this->parser->ReleaseTemporaryGuestArena();
259+
}
260+
}
261+
254262
HRESULT SourceTextModuleRecord::PostParseProcess()
255263
{
256264
HRESULT hr = NOERROR;
@@ -262,6 +270,9 @@ namespace Js
262270
{
263271
hr = PrepareForModuleDeclarationInitialization();
264272
}
273+
274+
this->ReleaseParserResources();
275+
265276
return hr;
266277
}
267278

@@ -305,6 +316,8 @@ namespace Js
305316
}
306317
}
307318

319+
this->ReleaseParserResources();
320+
308321
if (FAILED(hr))
309322
{
310323
// We cannot just use the buffer in the specifier string - need to make a copy here.
@@ -320,6 +333,8 @@ namespace Js
320333
}
321334
}
322335

336+
this->ReleaseParserResources();
337+
323338
return this->promise;
324339
}
325340

@@ -915,11 +930,6 @@ namespace Js
915930
childModuleRecord->GenerateRootFunction();
916931
});
917932
}
918-
919-
if (this->parser != nullptr)
920-
{
921-
this->parser->ReleaseTemporaryGuestArena();
922-
}
923933
}
924934

925935
Var SourceTextModuleRecord::ModuleEvaluation()

lib/Runtime/Language/SourceTextModuleRecord.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ namespace Js
159159

160160
HRESULT PostParseProcess();
161161
HRESULT PrepareForModuleDeclarationInitialization();
162+
void ReleaseParserResources();
162163
void ImportModuleListsFromParser();
163164
HRESULT OnChildModuleReady(SourceTextModuleRecord* childModule, Var errorObj);
164165
void NotifyParentsAsNeeded();

test/es6module/module-functionality.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,13 @@ var tests = [
361361
testRunner.LoadModule(` /x/ ; for(i=0);`, 'samethread', {shouldFail:true});
362362
}
363363
catch(e){}
364+
365+
try
366+
{
367+
// import non-existent module
368+
testRunner.LoadModule(` /x/ ;import 'funfuzz_moduleScript3';`, 'samethread', {shouldFail:true});
369+
}
370+
catch(e){}
364371
}
365372
},
366373
];

0 commit comments

Comments
 (0)