summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoyee Cheung <joyeec9h3@gmail.com>2019-02-08 09:04:07 +0800
committerJoyee Cheung <joyeec9h3@gmail.com>2019-02-12 10:26:38 +0800
commitaf83f6af5daf5b91f790cb6b9bf61f1ca566ccd0 (patch)
tree88244e3760b72364eb0acb68775c77780561ac18
parent9e84a26cb3d390a6ce051b75c892094fff233f92 (diff)
downloadandroid-node-v8-af83f6af5daf5b91f790cb6b9bf61f1ca566ccd0.tar.gz
android-node-v8-af83f6af5daf5b91f790cb6b9bf61f1ca566ccd0.tar.bz2
android-node-v8-af83f6af5daf5b91f790cb6b9bf61f1ca566ccd0.zip
process: normalize process.execPath in CreateProcessObject()
Directly normalize `process.execPath` using `uv_fs_realpath` on OpenBSD before serializing it into the process object, instead of using `require('fs')` to normalize and override the path in `bootstrap/node.js`. PR-URL: https://github.com/nodejs/node/pull/26002 Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Minwoo Jung <minwoo@nodesource.com> Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r--lib/internal/bootstrap/node.js7
-rw-r--r--src/node_process_object.cc39
2 files changed, 26 insertions, 20 deletions
diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js
index 2585fff206..afb6340570 100644
--- a/lib/internal/bootstrap/node.js
+++ b/lib/internal/bootstrap/node.js
@@ -187,13 +187,6 @@ if (browserGlobals) {
setupDOMException();
-// On OpenBSD process.execPath will be relative unless we
-// get the full path before process.execPath is used.
-if (process.platform === 'openbsd') {
- const { realpathSync } = NativeModule.require('fs');
- process.execPath = realpathSync.native(process.execPath);
-}
-
Object.defineProperty(process, 'argv0', {
enumerable: true,
configurable: false,
diff --git a/src/node_process_object.cc b/src/node_process_object.cc
index 159d9fdc40..2f47b21f69 100644
--- a/src/node_process_object.cc
+++ b/src/node_process_object.cc
@@ -273,21 +273,34 @@ MaybeLocal<Object> CreateProcessObject(
// process.execPath
{
- size_t exec_path_len = 2 * PATH_MAX;
- std::vector<char> exec_path(exec_path_len);
- Local<String> exec_path_value;
- if (uv_exepath(exec_path.data(), &exec_path_len) == 0) {
- exec_path_value = String::NewFromUtf8(env->isolate(),
- exec_path.data(),
- NewStringType::kInternalized,
- exec_path_len).ToLocalChecked();
+ char exec_path_buf[2 * PATH_MAX];
+ size_t exec_path_len = sizeof(exec_path_buf);
+ std::string exec_path;
+ if (uv_exepath(exec_path_buf, &exec_path_len) == 0) {
+ exec_path = std::string(exec_path_buf, exec_path_len);
} else {
- exec_path_value = String::NewFromUtf8(env->isolate(), args[0].c_str(),
- NewStringType::kInternalized).ToLocalChecked();
+ exec_path = args[0];
}
- process->Set(env->context(),
- FIXED_ONE_BYTE_STRING(env->isolate(), "execPath"),
- exec_path_value).FromJust();
+ // On OpenBSD process.execPath will be relative unless we
+ // get the full path before process.execPath is used.
+#if defined(__OpenBSD__)
+ uv_fs_t req;
+ req.ptr = nullptr;
+ if (0 ==
+ uv_fs_realpath(env->event_loop(), &req, exec_path.c_str(), nullptr)) {
+ CHECK_NOT_NULL(req.ptr);
+ exec_path = std::string(static_cast<char*>(req.ptr));
+ }
+#endif
+ process
+ ->Set(env->context(),
+ FIXED_ONE_BYTE_STRING(env->isolate(), "execPath"),
+ String::NewFromUtf8(env->isolate(),
+ exec_path.c_str(),
+ NewStringType::kInternalized,
+ exec_path.size())
+ .ToLocalChecked())
+ .FromJust();
}
// process.debugPort