Skip to content

Commit c80f8fa

Browse files
committed
process: set key properties as ReadOnly
1 parent 78d9094 commit c80f8fa

File tree

1 file changed

+35
-25
lines changed

1 file changed

+35
-25
lines changed

src/node.cc

+35-25
Original file line numberDiff line numberDiff line change
@@ -2199,6 +2199,12 @@ static void NeedImmediateCallbackSetter(Local<String> property,
21992199
}
22002200

22012201

2202+
#define READONLY_PROPERTY(obj, str, var) \
2203+
do { \
2204+
obj->Set(String::New(str), var, v8::ReadOnly); \
2205+
} while (0)
2206+
2207+
22022208
Handle<Object> SetupProcessObject(int argc, char *argv[]) {
22032209
HandleScope scope(node_isolate);
22042210

@@ -2218,27 +2224,27 @@ Handle<Object> SetupProcessObject(int argc, char *argv[]) {
22182224
ProcessTitleSetter);
22192225

22202226
// process.version
2221-
process->Set(String::NewSymbol("version"), String::New(NODE_VERSION));
2227+
READONLY_PROPERTY(process, "version", String::New(NODE_VERSION));
22222228

22232229
// process.moduleLoadList
22242230
Local<Array> modules = Array::New();
22252231
module_load_list.Reset(node_isolate, modules);
2226-
process->Set(String::NewSymbol("moduleLoadList"), modules);
2232+
READONLY_PROPERTY(process, "moduleLoadList", modules);
22272233

22282234
// process.versions
22292235
Local<Object> versions = Object::New();
2230-
process->Set(String::NewSymbol("versions"), versions);
2231-
versions->Set(String::NewSymbol("http_parser"), String::New(
2232-
NODE_STRINGIFY(HTTP_PARSER_VERSION_MAJOR) "."
2233-
NODE_STRINGIFY(HTTP_PARSER_VERSION_MINOR)));
2236+
READONLY_PROPERTY(process, "versions", versions);
2237+
READONLY_PROPERTY(versions, "http_parser", String::New(
2238+
NODE_STRINGIFY(HTTP_PARSER_VERSION_MAJOR) "."
2239+
NODE_STRINGIFY(HTTP_PARSER_VERSION_MINOR)));
22342240
// +1 to get rid of the leading 'v'
2235-
versions->Set(String::NewSymbol("node"), String::New(NODE_VERSION+1));
2236-
versions->Set(String::NewSymbol("v8"), String::New(V8::GetVersion()));
2237-
versions->Set(String::NewSymbol("ares"), String::New(ARES_VERSION_STR));
2238-
versions->Set(String::NewSymbol("uv"), String::New(uv_version_string()));
2239-
versions->Set(String::NewSymbol("zlib"), String::New(ZLIB_VERSION));
2240-
versions->Set(String::NewSymbol("modules"),
2241-
String::New(NODE_STRINGIFY(NODE_MODULE_VERSION)));
2241+
READONLY_PROPERTY(versions, "node", String::New(NODE_VERSION+1));
2242+
READONLY_PROPERTY(versions, "v8", String::New(V8::GetVersion()));
2243+
READONLY_PROPERTY(versions, "uv", String::New(uv_version_string()));
2244+
READONLY_PROPERTY(versions, "zlib", String::New(ZLIB_VERSION));
2245+
READONLY_PROPERTY(versions,
2246+
"modules",
2247+
String::New(NODE_STRINGIFY(NODE_MODULE_VERSION)));
22422248
#if HAVE_OPENSSL
22432249
// Stupid code to slice out the version string.
22442250
int c, l = strlen(OPENSSL_VERSION_TEXT);
@@ -2252,17 +2258,18 @@ Handle<Object> SetupProcessObject(int argc, char *argv[]) {
22522258
break;
22532259
}
22542260
}
2255-
versions->Set(String::NewSymbol("openssl"),
2256-
String::New(&OPENSSL_VERSION_TEXT[i], j - i));
2261+
READONLY_PROPERTY(versions,
2262+
"openssl",
2263+
String::New(&OPENSSL_VERSION_TEXT[i], j - i));
22572264
#endif
22582265

22592266

22602267

22612268
// process.arch
2262-
process->Set(String::NewSymbol("arch"), String::New(ARCH));
2269+
READONLY_PROPERTY(process, "arch", String::New(ARCH));
22632270

22642271
// process.platform
2265-
process->Set(String::NewSymbol("platform"), String::New(PLATFORM));
2272+
READONLY_PROPERTY(process, "platform", String::New(PLATFORM));
22662273

22672274
// process.argv
22682275
Local<Array> arguments = Array::New(argc - option_end_index + 1);
@@ -2294,40 +2301,40 @@ Handle<Object> SetupProcessObject(int argc, char *argv[]) {
22942301
Local<Object> env = envTemplate->NewInstance();
22952302
process->Set(String::NewSymbol("env"), env);
22962303

2297-
process->Set(String::NewSymbol("pid"), Integer::New(getpid(), node_isolate));
2298-
process->Set(String::NewSymbol("features"), GetFeatures());
2304+
READONLY_PROPERTY(process, "pid", Integer::New(getpid(), node_isolate));
2305+
READONLY_PROPERTY(process, "features", GetFeatures());
22992306
process->SetAccessor(String::New("_needImmediateCallback"),
23002307
NeedImmediateCallbackGetter,
23012308
NeedImmediateCallbackSetter);
23022309

23032310
// -e, --eval
23042311
if (eval_string) {
2305-
process->Set(String::NewSymbol("_eval"), String::New(eval_string));
2312+
READONLY_PROPERTY(process, "_eval", String::New(eval_string));
23062313
}
23072314

23082315
// -p, --print
23092316
if (print_eval) {
2310-
process->Set(String::NewSymbol("_print_eval"), True(node_isolate));
2317+
READONLY_PROPERTY(process, "_print_eval", True(node_isolate));
23112318
}
23122319

23132320
// -i, --interactive
23142321
if (force_repl) {
2315-
process->Set(String::NewSymbol("_forceRepl"), True(node_isolate));
2322+
READONLY_PROPERTY(process, "_forceRepl", True(node_isolate));
23162323
}
23172324

23182325
// --no-deprecation
23192326
if (no_deprecation) {
2320-
process->Set(String::NewSymbol("noDeprecation"), True(node_isolate));
2327+
READONLY_PROPERTY(process, "noDeprecation", True(node_isolate));
23212328
}
23222329

23232330
// --throw-deprecation
23242331
if (throw_deprecation) {
2325-
process->Set(String::NewSymbol("throwDeprecation"), True(node_isolate));
2332+
READONLY_PROPERTY(process, "throwDeprecation", True(node_isolate));
23262333
}
23272334

23282335
// --trace-deprecation
23292336
if (trace_deprecation) {
2330-
process->Set(String::NewSymbol("traceDeprecation"), True(node_isolate));
2337+
READONLY_PROPERTY(process, "traceDeprecation", True(node_isolate));
23312338
}
23322339

23332340
size_t size = 2*PATH_MAX;
@@ -2398,6 +2405,9 @@ Handle<Object> SetupProcessObject(int argc, char *argv[]) {
23982405
}
23992406

24002407

2408+
#undef READONLY_PROPERTY
2409+
2410+
24012411
static void AtExit() {
24022412
uv_tty_reset_mode();
24032413
}

0 commit comments

Comments
 (0)