summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDeokjin Kim <deokjin81.kim@gmail.com>2023-05-08 08:58:41 +0900
committerGitHub <noreply@github.com>2023-05-07 23:58:41 +0000
commit2545019451ff375b538b0ad4fe09e906c50cbc39 (patch)
treef584b307860deea4199a4a5414fd95c323d038d2
parent528aacab8def0d8c57ae05d96f0cf73d6f976f28 (diff)
downloadnode-new-2545019451ff375b538b0ad4fe09e906c50cbc39.tar.gz
buffer: combine checking range of sourceStart in `buf.copy`
Merging 2 checking range of sourceStart into 1. Plus, add test case to increase coverage if sourceStart is greater than length of source. PR-URL: https://github.com/nodejs/node/pull/47758 Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
-rw-r--r--lib/buffer.js10
-rw-r--r--test/parallel/test-buffer-alloc.js2
-rw-r--r--test/parallel/test-buffer-copy.js11
3 files changed, 12 insertions, 11 deletions
diff --git a/lib/buffer.js b/lib/buffer.js
index ec20e3432f..0ff7c1920a 100644
--- a/lib/buffer.js
+++ b/lib/buffer.js
@@ -222,8 +222,8 @@ function _copy(source, target, targetStart, sourceStart, sourceEnd) {
sourceStart = 0;
} else {
sourceStart = toInteger(sourceStart, 0);
- if (sourceStart < 0)
- throw new ERR_OUT_OF_RANGE('sourceStart', '>= 0', sourceStart);
+ if (sourceStart < 0 || sourceStart > source.length)
+ throw new ERR_OUT_OF_RANGE('sourceStart', `>= 0 && <= ${source.length}`, sourceStart);
}
if (sourceEnd === undefined) {
@@ -237,12 +237,6 @@ function _copy(source, target, targetStart, sourceStart, sourceEnd) {
if (targetStart >= target.length || sourceStart >= sourceEnd)
return 0;
- if (sourceStart > source.length) {
- throw new ERR_OUT_OF_RANGE('sourceStart',
- `<= ${source.length}`,
- sourceStart);
- }
-
return _copyActual(source, target, targetStart, sourceStart, sourceEnd);
}
diff --git a/test/parallel/test-buffer-alloc.js b/test/parallel/test-buffer-alloc.js
index d2085d1180..c6b7280270 100644
--- a/test/parallel/test-buffer-alloc.js
+++ b/test/parallel/test-buffer-alloc.js
@@ -124,7 +124,7 @@ b.copy(Buffer.alloc(0), 1, 1, 1);
b.copy(Buffer.alloc(1), 1, 1, 1);
// Try to copy 0 bytes from past the end of the source buffer
-b.copy(Buffer.alloc(1), 0, 2048, 2048);
+b.copy(Buffer.alloc(1), 0, 1024, 1024);
// Testing for smart defaults and ability to pass string values as offset
{
diff --git a/test/parallel/test-buffer-copy.js b/test/parallel/test-buffer-copy.js
index f7ccfff9d0..fef20578cf 100644
--- a/test/parallel/test-buffer-copy.js
+++ b/test/parallel/test-buffer-copy.js
@@ -155,8 +155,15 @@ assert.throws(
{
code: 'ERR_OUT_OF_RANGE',
name: 'RangeError',
- message: 'The value of "sourceStart" is out of range. ' +
- 'It must be >= 0. Received -1'
+ }
+);
+
+// Copy throws if sourceStart is greater than length of source
+assert.throws(
+ () => Buffer.allocUnsafe(5).copy(Buffer.allocUnsafe(5), 0, 100),
+ {
+ code: 'ERR_OUT_OF_RANGE',
+ name: 'RangeError',
}
);