@@ -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