From b799a74709af69daf13901390df9428c4c38adfc Mon Sep 17 00:00:00 2001 From: cjihrig Date: Fri, 11 Dec 2015 14:57:45 -0500 Subject: [PATCH] src: fix line numbers on core errors In dfee4e3712ac4673b5fc472a8f77ac65bdc65f87, the module wrapper and line offset used when wrapping module code was changed to better report errors on the first line of modules. However, that commit did not update the runInThisContext() call used to execute the core modules, so their error line numbers have been off by one. This commit provides the correct lineOffset for core modules. Refs: https://github.com/nodejs/node/pull/2867 PR-URL: https://github.com/nodejs/node/pull/4254 Reviewed-By: Brian White Reviewed-By: James M Snell Reviewed-By: Minwoo Jung Reviewed-By: Ben Noordhuis --- src/node.js | 5 ++++- test/message/core_line_numbers.js | 11 +++++++++++ test/message/core_line_numbers.out | 15 +++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 test/message/core_line_numbers.js create mode 100644 test/message/core_line_numbers.out diff --git a/src/node.js b/src/node.js index 059c65f7df19f0..f1449fb34b4906 100644 --- a/src/node.js +++ b/src/node.js @@ -966,7 +966,10 @@ var source = NativeModule.getSource(this.id); source = NativeModule.wrap(source); - var fn = runInThisContext(source, { filename: this.filename }); + var fn = runInThisContext(source, { + filename: this.filename, + lineOffset: -1 + }); fn(this.exports, NativeModule.require, this, this.filename); this.loaded = true; diff --git a/test/message/core_line_numbers.js b/test/message/core_line_numbers.js new file mode 100644 index 00000000000000..ab86eb1e38f7f4 --- /dev/null +++ b/test/message/core_line_numbers.js @@ -0,0 +1,11 @@ +'use strict'; +const common = require('../common'); +const punycode = require('punycode'); + +// This test verifies that line numbers in core modules are reported correctly. +// The punycode module was chosen for testing because it changes infrequently. +// If this test begins failing, it is likely due to a punycode update, and the +// test's assertions simply need to be updated to reflect the changes. If a +// punycode update was not made, and this test begins failing, then line numbers +// are probably actually broken. +punycode.decode('x'); diff --git a/test/message/core_line_numbers.out b/test/message/core_line_numbers.out new file mode 100644 index 00000000000000..c4909774a0e6ec --- /dev/null +++ b/test/message/core_line_numbers.out @@ -0,0 +1,15 @@ +punycode.js:67 + throw new RangeError(errors[type]); + ^ + +RangeError: Invalid input + at error (punycode.js:67:*) + at Object.decode (punycode.js:*:*) + at Object. (*test*message*core_line_numbers.js:*:*) + at Module._compile (module.js:*:*) + at Object.Module._extensions..js (module.js:*:*) + at Module.load (module.js:*:*) + at Function.Module._load (module.js:*:*) + at Function.Module.runMain (module.js:*:*) + at startup (node.js:*:*) + at node.js:*:*