From 2bca32ad8a586e0c7901010798ac8a1fb0ed6a4c Mon Sep 17 00:00:00 2001 From: sinkhaha <1468709106@qq.com> Date: Thu, 25 May 2023 11:08:44 +0800 Subject: [PATCH 1/3] vm: refactor to use 'validateInt32' to verify lineOffset --- lib/internal/vm.js | 3 ++- test/parallel/test-vm-basic.js | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/internal/vm.js b/lib/internal/vm.js index b14ba13e7e4cfb..aef56c28e6b100 100644 --- a/lib/internal/vm.js +++ b/lib/internal/vm.js @@ -17,6 +17,7 @@ const { validateString, validateStringArray, validateUint32, + validateInt32, } = require('internal/validators'); const { ERR_INVALID_ARG_TYPE, @@ -47,7 +48,7 @@ function internalCompileFunction(code, params, options) { validateString(filename, 'options.filename'); validateUint32(columnOffset, 'options.columnOffset'); - validateUint32(lineOffset, 'options.lineOffset'); + validateInt32(lineOffset, 'options.lineOffset'); if (cachedData !== undefined) validateBuffer(cachedData, 'options.cachedData'); validateBoolean(produceCachedData, 'options.produceCachedData'); diff --git a/test/parallel/test-vm-basic.js b/test/parallel/test-vm-basic.js index f2424128b66e9f..21303cc892894c 100644 --- a/test/parallel/test-vm-basic.js +++ b/test/parallel/test-vm-basic.js @@ -254,6 +254,17 @@ const vm = require('vm'); // Setting value to run the last three tests Error.stackTraceLimit = 1; + assert.throws(() => { + vm.compileFunction( + 'throw new Error("Sample Error")', + [], + { lineOffset: -1 } + )(); + }, { + message: 'Sample Error', + stack: 'Error: Sample Error\n at ' + }); + assert.throws(() => { vm.compileFunction('throw new Error("Sample Error")')(); }, { From 88bca653b06aed4d571855c62150fef3937a71d0 Mon Sep 17 00:00:00 2001 From: sinkhaha <1468709106@qq.com> Date: Thu, 25 May 2023 11:25:17 +0800 Subject: [PATCH 2/3] vm: add lineOffset test --- test/parallel/test-vm-basic.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/parallel/test-vm-basic.js b/test/parallel/test-vm-basic.js index 21303cc892894c..3eed89460a09ce 100644 --- a/test/parallel/test-vm-basic.js +++ b/test/parallel/test-vm-basic.js @@ -265,6 +265,17 @@ const vm = require('vm'); stack: 'Error: Sample Error\n at ' }); + assert.throws(() => { + vm.compileFunction( + 'throw new Error("Sample Error")', + [], + { lineOffset: -2 } + )(); + }, { + message: 'Sample Error', + stack: 'Error: Sample Error\n at :-1:7' + }); + assert.throws(() => { vm.compileFunction('throw new Error("Sample Error")')(); }, { From 8703f4a5539f0931a6631105b87aa534e56c527b Mon Sep 17 00:00:00 2001 From: sinkhaha <1468709106@qq.com> Date: Thu, 25 May 2023 11:57:16 +0800 Subject: [PATCH 3/3] vm: refactor to use 'validateInt32' to verify columnOffset --- lib/internal/vm.js | 3 +-- test/parallel/test-vm-basic.js | 11 +++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/internal/vm.js b/lib/internal/vm.js index aef56c28e6b100..d2063c78e6315d 100644 --- a/lib/internal/vm.js +++ b/lib/internal/vm.js @@ -16,7 +16,6 @@ const { validateObject, validateString, validateStringArray, - validateUint32, validateInt32, } = require('internal/validators'); const { @@ -47,7 +46,7 @@ function internalCompileFunction(code, params, options) { } = options; validateString(filename, 'options.filename'); - validateUint32(columnOffset, 'options.columnOffset'); + validateInt32(columnOffset, 'options.columnOffset'); validateInt32(lineOffset, 'options.lineOffset'); if (cachedData !== undefined) validateBuffer(cachedData, 'options.cachedData'); diff --git a/test/parallel/test-vm-basic.js b/test/parallel/test-vm-basic.js index 3eed89460a09ce..f70141e2b17a22 100644 --- a/test/parallel/test-vm-basic.js +++ b/test/parallel/test-vm-basic.js @@ -294,6 +294,17 @@ const vm = require('vm'); stack: 'Error: Sample Error\n at :4:7' }); + assert.throws(() => { + vm.compileFunction( + 'throw new Error("Sample Error")', + [], + { columnOffset: -1 } + )(); + }, { + message: 'Sample Error', + stack: 'Error: Sample Error\n at :1:6' + }); + assert.throws(() => { vm.compileFunction( 'throw new Error("Sample Error")',