chore(read-chunk): assert size <= 1GiB
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
|
const assert = require('assert')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read a chunk of data from a stream.
|
* Read a chunk of data from a stream.
|
||||||
*
|
*
|
||||||
@@ -21,6 +23,12 @@ const readChunk = (stream, size) =>
|
|||||||
: size === 0
|
: size === 0
|
||||||
? Promise.resolve(Buffer.alloc(0))
|
? Promise.resolve(Buffer.alloc(0))
|
||||||
: new Promise((resolve, reject) => {
|
: 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() {
|
function onEnd() {
|
||||||
resolve(null)
|
resolve(null)
|
||||||
removeListeners()
|
removeListeners()
|
||||||
|
|||||||
@@ -10,7 +10,20 @@ const { readChunk, readChunkStrict } = require('./')
|
|||||||
const makeStream = it => Readable.from(it, { objectMode: false })
|
const makeStream = it => Readable.from(it, { objectMode: false })
|
||||||
makeStream.obj = Readable.from
|
makeStream.obj = Readable.from
|
||||||
|
|
||||||
|
const rejectionOf = promise =>
|
||||||
|
promise.then(
|
||||||
|
value => {
|
||||||
|
throw value
|
||||||
|
},
|
||||||
|
error => error
|
||||||
|
)
|
||||||
|
|
||||||
describe('readChunk', () => {
|
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 () => {
|
it('returns null if stream is empty', async () => {
|
||||||
assert.strictEqual(await readChunk(makeStream([])), null)
|
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 () {
|
describe('readChunkStrict', function () {
|
||||||
it('throws if stream is empty', async () => {
|
it('throws if stream is empty', async () => {
|
||||||
const error = await rejectionOf(readChunkStrict(makeStream([])))
|
const error = await rejectionOf(readChunkStrict(makeStream([])))
|
||||||
|
|||||||
@@ -27,4 +27,6 @@
|
|||||||
|
|
||||||
<!--packages-start-->
|
<!--packages-start-->
|
||||||
|
|
||||||
|
- @vates/read-chunk patch
|
||||||
|
|
||||||
<!--packages-end-->
|
<!--packages-end-->
|
||||||
|
|||||||
Reference in New Issue
Block a user