@@ -11,8 +11,9 @@ const { ReadableStreamFrom } = require('../core/util')
1111const kConsume = Symbol ( 'kConsume' )
1212const kReading = Symbol ( 'kReading' )
1313const kBody = Symbol ( 'kBody' )
14- const kAbort = Symbol ( 'abort ' )
14+ const kAbort = Symbol ( 'kAbort ' )
1515const kContentType = Symbol ( 'kContentType' )
16+ const kContentLength = Symbol ( 'kContentLength' )
1617
1718const noop = ( ) => { }
1819
@@ -21,6 +22,7 @@ class BodyReadable extends Readable {
2122 resume,
2223 abort,
2324 contentType = '' ,
25+ contentLength,
2426 highWaterMark = 64 * 1024 // Same as nodejs fs streams.
2527 } ) {
2628 super ( {
@@ -35,6 +37,7 @@ class BodyReadable extends Readable {
3537 this [ kConsume ] = null
3638 this [ kBody ] = null
3739 this [ kContentType ] = contentType
40+ this [ kContentLength ] = contentLength
3841
3942 // Is stream being consumed through Readable API?
4043 // This is an optimization so that we avoid checking
@@ -146,7 +149,7 @@ class BodyReadable extends Readable {
146149 }
147150
148151 async dump ( opts ) {
149- let limit = Number . isFinite ( opts ?. limit ) ? opts . limit : 262144
152+ let limit = Number . isFinite ( opts ?. limit ) ? opts . limit : 128 * 1024
150153 const signal = opts ?. signal
151154
152155 if ( signal != null && ( typeof signal !== 'object' || ! ( 'aborted' in signal ) ) ) {
@@ -160,6 +163,10 @@ class BodyReadable extends Readable {
160163 }
161164
162165 return await new Promise ( ( resolve , reject ) => {
166+ if ( this [ kContentLength ] > limit ) {
167+ this . destroy ( new AbortError ( ) )
168+ }
169+
163170 const onAbort = ( ) => {
164171 this . destroy ( signal . reason ?? new AbortError ( ) )
165172 }
0 commit comments