Skip to content

Commit 0e834b5

Browse files
committed
fix: RangeError [ERR_BUFFER_OUT_OF_BOUNDS] "length" is outside of buffer bounds since nodejs 22.7
call buf.utf8Write() conditionally, it will be called in buf.write() ref: #2025
1 parent 19e1fef commit 0e834b5

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

.github/workflows/test.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
runs-on: ubuntu-latest
2424
strategy:
2525
matrix:
26-
node_version: ["12", "14", "16", "18"]
26+
node_version: ["12", "14", "16", "18", "20", "22"]
2727
steps:
2828
- uses: actions/checkout@v1
2929
- uses: actions/setup-node@v1

src/writer_buffer.js

+16-2
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,14 @@ BufferWriter.prototype.bytes = function write_bytes_buffer(value) {
5454
return this;
5555
};
5656

57+
const isOlderVer = compareVersions(process.version.slice(1), targetVersion) < 0 ? true : false;
58+
5759
function writeStringBuffer(val, buf, pos) {
60+
const targetVersion = '22.7.0';
5861
if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)
5962
util.utf8.write(val, buf, pos);
60-
else if (buf.utf8Write)
61-
buf.utf8Write(val, pos);
63+
else if (isOlderVer && buf.utf8Write)
64+
buf.utf8Write(val, pos); // node less than 22.7.0
6265
else
6366
buf.write(val, pos);
6467
}
@@ -83,3 +86,14 @@ BufferWriter.prototype.string = function write_string_buffer(value) {
8386
*/
8487

8588
BufferWriter._configure();
89+
90+
function compareVersions(version1, version2) {
91+
const v1Parts = version1.split('.').map(Number);
92+
const v2Parts = version2.split('.').map(Number);
93+
94+
for (let i = 0; i < Math.max(v1Parts.length, v2Parts.length); i+=1) {
95+
if ((v1Parts[i] || 0) < (v2Parts[i] || 0)) { return -1 }
96+
if ((v1Parts[i] || 0) > (v2Parts[i] || 0)) { return 1 }
97+
}
98+
return 0;
99+
}

0 commit comments

Comments
 (0)