Skip to content

Commit 37f2243

Browse files
committed
1 parent e65bb10 commit 37f2243

File tree

4 files changed

+36
-21
lines changed

4 files changed

+36
-21
lines changed

doc/api/errors.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1920,7 +1920,8 @@ The imported module string is an invalid URL, package name, or package subpath
19201920
specifier.
19211921

19221922
<a id="ERR_INVALID_OBJECT_DEFINE_PROPERTY"></a>
1923-
### ERR_INVALID_OBJECT_DEFINE_PROPERTY
1923+
1924+
### ERR\_INVALID\_OBJECT\_DEFINE\_PROPERTY
19241925

19251926
An error occurred while setting an invalid attribute on the property of
19261927
an object.

src/node_env_var.cc

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -401,20 +401,32 @@ static void EnvDefiner(Local<Name> property,
401401
const PropertyDescriptor& desc,
402402
const PropertyCallbackInfo<Value>& info) {
403403
Environment* env = Environment::GetCurrent(info);
404-
if (desc.has_value() && !desc.configurable() && !desc.enumerable() &&
405-
!desc.writable()) {
406-
THROW_ERR_INVALID_OBJECT_DEFINE_PROPERTY(env,
407-
"Must set all attributes with true to 'value'"
408-
" in 'process.env'");
409-
} else if (desc.has_get() || desc.has_set() ||
410-
(desc.has_configurable() && !desc.configurable()) ||
411-
(desc.has_enumerable() && !desc.enumerable()) ||
412-
(desc.has_writable() && !desc.writable())) {
404+
if (desc.has_value()) {
405+
if (!desc.has_writable() ||
406+
!desc.has_enumerable() ||
407+
!desc.has_configurable()) {
408+
THROW_ERR_INVALID_OBJECT_DEFINE_PROPERTY(env,
409+
"'process.env' only accepts a "
410+
"configurable, writable,"
411+
" and enumerable data descriptor");
412+
} else if (!desc.configurable() || !desc.enumerable() || !desc.writable()) {
413+
THROW_ERR_INVALID_OBJECT_DEFINE_PROPERTY(env,
414+
"'process.env' only accepts a "
415+
"configurable, writable,"
416+
" and enumerable data descriptor");
417+
} else {
418+
return EnvSetter(property, desc.value(), info);
419+
}
420+
} else if (desc.has_get() || desc.has_set()) {
421+
// we don't accept a getter/setter in 'process.env'
413422
THROW_ERR_INVALID_OBJECT_DEFINE_PROPERTY(env,
414-
"Cannot set attributes other than 'value'"
415-
" for properties in 'process.env'");
423+
"'process.env' does not accept an"
424+
"accessor(getter/setter) descriptor");
416425
} else {
417-
EnvSetter(property, desc.value(), info);
426+
THROW_ERR_INVALID_OBJECT_DEFINE_PROPERTY(env,
427+
"'process.env' only accepts a "
428+
"configurable, writable,"
429+
" and enumerable data descriptor");
418430
}
419431
}
420432

test/parallel/test-process-env-ignore-getter-setter.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ assert.throws(
1111
{
1212
code: 'ERR_INVALID_OBJECT_DEFINE_PROPERTY',
1313
name: 'TypeError',
14-
message: 'Must set all attributes with true to \'value\' ' +
15-
'in \'process.env\''
14+
message: '\'process.env\' only accepts a ' +
15+
'configurable, writable,' +
16+
' and enumerable data descriptor'
1617
}
1718
);
1819

@@ -32,8 +33,8 @@ assert.throws(
3233
{
3334
code: 'ERR_INVALID_OBJECT_DEFINE_PROPERTY',
3435
name: 'TypeError',
35-
message: 'Cannot set attributes other than \'value\' ' +
36-
'for properties in \'process.env\''
36+
message: '\'process.env\' does not accept an' +
37+
'accessor(getter/setter) descriptor'
3738
}
3839
);
3940

@@ -49,8 +50,9 @@ attributes.forEach((attribute) => {
4950
{
5051
code: 'ERR_INVALID_OBJECT_DEFINE_PROPERTY',
5152
name: 'TypeError',
52-
message: 'Cannot set attributes other than \'value\' ' +
53-
'for properties in \'process.env\''
53+
message: '\'process.env\' only accepts a ' +
54+
'configurable, writable,' +
55+
' and enumerable data descriptor'
5456
}
5557
);
5658
});

test/parallel/test-worker-process-env.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ if (!workerData && process.argv[2] !== 'child') {
4848
{
4949
code: 'ERR_INVALID_OBJECT_DEFINE_PROPERTY',
5050
name: 'TypeError',
51-
message: 'Must set all attributes with true to \'value\' ' +
52-
'in \'process.env\''
51+
message: '\'process.env\' only accepts a configurable, ' +
52+
'writable, and enumerable data descriptor'
5353
}
5454
);
5555

0 commit comments

Comments
 (0)