lib: fix compileFunction throws range error for negative numbers · nodejs/node@5b5e519

2 files changed

lines changed

Original file line numberDiff line numberDiff line change

@@ -16,7 +16,7 @@ const {

1616

validateObject,

1717

validateString,

1818

validateStringArray,

19-

validateUint32,

19+

validateInt32,

2020

} = require('internal/validators');

2121

const {

2222

ERR_INVALID_ARG_TYPE,

@@ -46,8 +46,8 @@ function internalCompileFunction(code, params, options) {

4646

} = options;

4747
4848

validateString(filename, 'options.filename');

49-

validateUint32(columnOffset, 'options.columnOffset');

50-

validateUint32(lineOffset, 'options.lineOffset');

49+

validateInt32(columnOffset, 'options.columnOffset');

50+

validateInt32(lineOffset, 'options.lineOffset');

5151

if (cachedData !== undefined)

5252

validateBuffer(cachedData, 'options.cachedData');

5353

validateBoolean(produceCachedData, 'options.produceCachedData');

Original file line numberDiff line numberDiff line change

@@ -0,0 +1,34 @@

1+

'use strict';

2+
3+

require('../common');

4+
5+

const assert = require('assert');

6+

const { compileFunction } = require('node:vm');

7+
8+

const min = -2147483648;

9+

const max = 2147483647;

10+
11+

compileFunction('', [], { lineOffset: min, columnOffset: min });

12+

compileFunction('', [], { lineOffset: max, columnOffset: max });

13+
14+

assert.throws(

15+

() => {

16+

compileFunction('', [], { lineOffset: min - 1, columnOffset: max });

17+

},

18+

{

19+

code: 'ERR_OUT_OF_RANGE',

20+

name: 'RangeError',

21+

message: /The value of "options\.lineOffset" is out of range/,

22+

}

23+

);

24+
25+

assert.throws(

26+

() => {

27+

compileFunction('', [], { lineOffset: min, columnOffset: min - 1 });

28+

},

29+

{

30+

code: 'ERR_OUT_OF_RANGE',

31+

name: 'RangeError',

32+

message: /The value of "options\.columnOffset" is out of range/,

33+

}

34+

);