Skip to content

Commit 5db08cf

Browse files
authored
sea: fix memory leak detected by asan
Signed-off-by: Darshan Sen <[email protected]> PR-URL: #47309 Reviewed-By: Yagiz Nizipli <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Mohammed Keyvanzadeh <[email protected]> Reviewed-By: Joyee Cheung <[email protected]> Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent eef1304 commit 5db08cf

File tree

2 files changed

+8
-18
lines changed

2 files changed

+8
-18
lines changed

src/node_sea.cc

+8-13
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <memory>
1818
#include <string_view>
1919
#include <tuple>
20+
#include <vector>
2021

2122
#if !defined(DISABLE_SINGLE_EXECUTABLE_APPLICATION)
2223

@@ -60,19 +61,13 @@ std::tuple<int, char**> FixupArgsForSEA(int argc, char** argv) {
6061
// Repeats argv[0] at position 1 on argv as a replacement for the missing
6162
// entry point file path.
6263
if (IsSingleExecutable()) {
63-
char** new_argv = new char*[argc + 2];
64-
int new_argc = 0;
65-
new_argv[new_argc++] = argv[0];
66-
new_argv[new_argc++] = argv[0];
67-
68-
for (int i = 1; i < argc; ++i) {
69-
new_argv[new_argc++] = argv[i];
70-
}
71-
72-
new_argv[new_argc] = nullptr;
73-
74-
argc = new_argc;
75-
argv = new_argv;
64+
static std::vector<char*> new_argv;
65+
new_argv.reserve(argc + 2);
66+
new_argv.emplace_back(argv[0]);
67+
new_argv.insert(new_argv.end(), argv, argv + argc);
68+
new_argv.emplace_back(nullptr);
69+
argc = new_argv.size() - 1;
70+
argv = new_argv.data();
7671
}
7772

7873
return {argc, argv};

test/parallel/test-single-executable-application.js

-5
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,6 @@ if (!process.config.variables.single_executable_application)
1616
if (!['darwin', 'win32', 'linux'].includes(process.platform))
1717
common.skip(`Unsupported platform ${process.platform}.`);
1818

19-
if (process.platform === 'linux' && process.config.variables.asan) {
20-
// Source of the memory leak - https://github.com/nodejs/node/blob/da0bc6db98cef98686122ea1e2cd2dbd2f52d123/src/node_sea.cc#L94.
21-
common.skip('Running the resultant binary fails because of a memory leak ASAN error.');
22-
}
23-
2419
if (process.platform === 'linux' && process.config.variables.is_debug === 1)
2520
common.skip('Running the resultant binary fails with `Couldn\'t read target executable"`.');
2621

0 commit comments

Comments
 (0)