assert: handle undefined filename in getErrMessage

When generating an assertion error message,
`filename` might be undefined,
e.g. if `assert` is called in `eval`.

Handle this case gracefully instead of failing with
`Cannot read property 'endsWith' of undefined`.

Fixes: https://github.com/nodejs/node/issues/20847

PR-URL: https://github.com/nodejs/node/pull/20848
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Khaidi Chu <i@2333.moe>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Tim Seckinger 2018-05-20 14:37:28 +02:00 committed by James M Snell
parent ec39e62ff2
commit a5d86f8c4e
2 changed files with 14 additions and 0 deletions

View File

@ -154,6 +154,10 @@ function getBuffer(fd, assertLine) {
function getErrMessage(call) {
const filename = call.getFileName();
if (!filename) {
return;
}
const line = call.getLineNumber() - 1;
const column = call.getColumnNumber() - 1;
const identifier = `${filename}${line}${column}`;

View File

@ -783,6 +783,16 @@ common.expectsError(
}
);
// works in eval
common.expectsError(
() => new Function('assert', 'assert(1 === 2);')(assert),
{
code: 'ERR_ASSERTION',
type: assert.AssertionError,
message: 'false == true'
}
);
// Do not try to check Node.js modules.
{
const e = new EventEmitter();