Skip to content

Commit

Permalink
src: fix line numbers on core errors
Browse files Browse the repository at this point in the history
In dfee4e3, 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: nodejs#2867
PR-URL: nodejs#4254
Reviewed-By: Brian White <mscdex@mscdex.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Minwoo Jung <jmwsoft@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
  • Loading branch information
cjihrig committed Dec 14, 2015
1 parent 36ac3d6 commit b799a74
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 1 deletion.
5 changes: 4 additions & 1 deletion src/node.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
11 changes: 11 additions & 0 deletions test/message/core_line_numbers.js
Original file line number Diff line number Diff line change
@@ -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');
15 changes: 15 additions & 0 deletions test/message/core_line_numbers.out
Original file line number Diff line number Diff line change
@@ -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.<anonymous> (*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:*:*

0 comments on commit b799a74

Please sign in to comment.