Skip to content

Commit 73f8b30

Browse files
committed
process: make process.config read only
1 parent 49a5e81 commit 73f8b30

File tree

2 files changed

+14
-66
lines changed

2 files changed

+14
-66
lines changed

‎lib/internal/bootstrap/node.js‎

Lines changed: 4 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,8 @@ const{
4646
JSONParse,
4747
ObjectDefineProperty,
4848
ObjectGetPrototypeOf,
49-
ObjectPreventExtensions,
5049
ObjectSetPrototypeOf,
51-
ReflectGet,
52-
ReflectSet,
50+
ObjectFreeze,
5351
SymbolToStringTag,
5452
globalThis,
5553
}=primordials;
@@ -72,75 +70,15 @@ process._exiting = false;
7270
// process.config is serialized config.gypi
7371
constnativeModule=internalBinding('native_module');
7472

75-
// TODO(@jasnell): Once this has gone through one full major
76-
// release cycle, remove the Proxy and setter and update the
77-
// getter to either return a read-only object or always return
78-
// a freshly parsed version of nativeModule.config.
79-
80-
constdeprecationHandler={
81-
warned: false,
82-
message: 'Setting process.config is deprecated. '+
83-
'In the future the property will be read-only.',
84-
code: 'DEP0150',
85-
maybeWarn(){
86-
if(!this.warned){
87-
process.emitWarning(this.message,{
88-
type: 'DeprecationWarning',
89-
code: this.code
90-
});
91-
this.warned=true;
92-
}
93-
},
94-
95-
defineProperty(target,key,descriptor){
96-
this.maybeWarn();
97-
returnObjectDefineProperty(target,key,descriptor);
98-
},
99-
100-
deleteProperty(target,key){
101-
this.maybeWarn();
102-
deletetarget[key];
103-
},
104-
105-
preventExtensions(target){
106-
this.maybeWarn();
107-
returnObjectPreventExtensions(target);
108-
},
109-
110-
set(target,key,value){
111-
this.maybeWarn();
112-
returnReflectSet(target,key,value);
113-
},
114-
115-
get(target,key,receiver){
116-
constval=ReflectGet(target,key,receiver);
117-
if(val!=null&&typeofval==='object'){
118-
// eslint-disable-next-line node-core/prefer-primordials
119-
returnnewProxy(val,deprecationHandler);
120-
}
121-
returnval;
122-
},
123-
124-
setPrototypeOf(target,proto){
125-
this.maybeWarn();
126-
returnObjectSetPrototypeOf(target,proto);
127-
}
128-
};
129-
130-
// eslint-disable-next-line node-core/prefer-primordials
131-
letprocessConfig=newProxy(
132-
JSONParse(nativeModule.config),
133-
deprecationHandler);
73+
constprocessConfig=JSONParse(nativeModule.config,(_key,value)=>{
74+
returnObjectFreeze(value);
75+
});
13476

13577
ObjectDefineProperty(process,'config',{
13678
__proto__: null,
13779
enumerable: true,
13880
configurable: true,
13981
get(){returnprocessConfig;},
140-
set(value){
141-
deprecationHandler.maybeWarn();
142-
processConfig=value;
143-
}
14482
});
14583

14684
require('internal/worker/js_transferable').setup();

‎test/parallel/test-process-config.js‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,16 @@ assert(Object.hasOwn(process, 'config'));
3636
// Ensure that `process.config` is an Object.
3737
assert.strictEqual(Object(process.config),process.config);
3838

39+
// Ensure that you can't change config values
40+
try{
41+
process.config.variables=42;
42+
}catch(e){
43+
assert.strictEqual(
44+
e.message,
45+
"Cannot assign to read only property 'variables' of object '#<Object>'"
46+
);
47+
}
48+
3949
constconfigPath=path.resolve(__dirname,'..','..','config.gypi');
4050

4151
if(!fs.existsSync(configPath)){

0 commit comments

Comments
(0)