chore(read-chunk): assert size <= 1GiB

This commit is contained in:
Julien Fontanet
2023-03-30 10:55:44 +02:00
parent 02bb622e92
commit 93eb42785d
3 changed files with 23 additions and 8 deletions

View File

@@ -1,5 +1,7 @@
'use strict'
const assert = require('assert')
/**
* Read a chunk of data from a stream.
*
@@ -21,6 +23,12 @@ const readChunk = (stream, size) =>
: size === 0
? Promise.resolve(Buffer.alloc(0))
: new Promise((resolve, reject) => {
if (size !== undefined) {
// per Node documentation:
// > The size argument must be less than or equal to 1 GiB.
assert(size < 1073741824)
}
function onEnd() {
resolve(null)
removeListeners()

View File

@@ -10,7 +10,20 @@ const { readChunk, readChunkStrict } = require('./')
const makeStream = it => Readable.from(it, { objectMode: false })
makeStream.obj = Readable.from
const rejectionOf = promise =>
promise.then(
value => {
throw value
},
error => error
)
describe('readChunk', () => {
it('rejects if size is greater than or equal to 1 GiB', async () => {
const error = await rejectionOf(readChunk(makeStream([]), 1024 * 1024 * 1024))
assert.strictEqual(error.code, 'ERR_ASSERTION')
})
it('returns null if stream is empty', async () => {
assert.strictEqual(await readChunk(makeStream([])), null)
})
@@ -52,14 +65,6 @@ describe('readChunk', () => {
})
})
const rejectionOf = promise =>
promise.then(
value => {
throw value
},
error => error
)
describe('readChunkStrict', function () {
it('throws if stream is empty', async () => {
const error = await rejectionOf(readChunkStrict(makeStream([])))

View File

@@ -27,4 +27,6 @@
<!--packages-start-->
- @vates/read-chunk patch
<!--packages-end-->