@@ -15,7 +15,7 @@ internal sealed class ChunkedBodyStream : Stream, IDrainableStream
1515{
1616 private readonly PipeReader _reader ;
1717
18- private GlyphParser _parser ;
18+ private readonly GlyphParser _parser = new ( ) ;
1919
2020 private bool _completed ;
2121
@@ -56,47 +56,47 @@ public ChunkedBodyStream(PipeReader reader)
5656 public override Task < int > ReadAsync ( byte [ ] buffer , int offset , int count , CancellationToken cancellationToken )
5757 => ReadAsync ( buffer . AsMemory ( offset , count ) , cancellationToken ) . AsTask ( ) ;
5858
59- public override async ValueTask < int > ReadAsync ( Memory < byte > destination , CancellationToken cancellationToken = default )
59+ public override async ValueTask < int > ReadAsync ( Memory < byte > buffer , CancellationToken cancellationToken = default )
6060 {
61- if ( _completed || destination . IsEmpty )
61+ if ( _completed || buffer . IsEmpty )
6262 {
6363 return 0 ;
6464 }
6565
6666 // Return buffered overflow from a previous large chunk first.
6767 if ( _overflowLength > 0 )
6868 {
69- return ConsumeOverflow ( destination . Span ) ;
69+ return ConsumeOverflow ( buffer . Span ) ;
7070 }
7171
7272 while ( true )
7373 {
7474 var result = await _reader . ReadAsync ( cancellationToken ) ;
75- var buffer = result . Buffer ;
75+ var readBuffer = result . Buffer ;
7676
7777 byte [ ] ? rented = null ;
7878 ReadOnlySpan < byte > span ;
7979
80- if ( buffer . IsSingleSegment )
80+ if ( readBuffer . IsSingleSegment )
8181 {
82- span = buffer . First . Span ;
82+ span = readBuffer . First . Span ;
8383 }
8484 else
8585 {
8686 // Linearise the full multi-segment buffer so Glyph11 gets a contiguous view.
8787 // Glyph11 requires the complete chunk to be present before returning Chunk;
8888 // capping would cause perpetual NeedMoreData for chunks larger than the cap.
89- var len = ( int ) buffer . Length ;
89+ var len = ( int ) readBuffer . Length ;
9090 rented = ArrayPool < byte > . Shared . Rent ( len ) ;
91- buffer . CopyTo ( rented ) ;
91+ readBuffer . CopyTo ( rented ) ;
9292 span = rented . AsSpan ( 0 , len ) ;
9393 }
9494
9595 try
9696 {
9797 if ( span . IsEmpty )
9898 {
99- _reader . AdvanceTo ( buffer . Start , buffer . End ) ;
99+ _reader . AdvanceTo ( readBuffer . Start , readBuffer . End ) ;
100100
101101 if ( result . IsCompleted )
102102 {
@@ -111,12 +111,12 @@ public override async ValueTask<int> ReadAsync(Memory<byte> destination, Cancell
111111 switch ( chunkResult )
112112 {
113113 case ChunkResult . Completed :
114- _reader . AdvanceTo ( buffer . GetPosition ( bytesConsumed ) ) ;
114+ _reader . AdvanceTo ( readBuffer . GetPosition ( bytesConsumed ) ) ;
115115 _completed = true ;
116116 return 0 ;
117117
118118 case ChunkResult . NeedMoreData :
119- _reader . AdvanceTo ( buffer . Start , buffer . End ) ;
119+ _reader . AdvanceTo ( readBuffer . Start , readBuffer . End ) ;
120120
121121 if ( result . IsCompleted )
122122 {
@@ -127,10 +127,10 @@ public override async ValueTask<int> ReadAsync(Memory<byte> destination, Cancell
127127
128128 case ChunkResult . Chunk :
129129 var chunk = span . Slice ( dataOffset , dataLength ) ;
130- var toCopy = Math . Min ( destination . Length , dataLength ) ;
130+ var toCopy = Math . Min ( buffer . Length , dataLength ) ;
131131
132132 // Copy to caller's buffer BEFORE advancing the pipe reader to keep span valid.
133- chunk [ ..toCopy ] . CopyTo ( destination . Span ) ;
133+ chunk [ ..toCopy ] . CopyTo ( buffer . Span ) ;
134134
135135 if ( toCopy < dataLength )
136136 {
@@ -141,7 +141,7 @@ public override async ValueTask<int> ReadAsync(Memory<byte> destination, Cancell
141141 _overflowLength = dataLength - toCopy ;
142142 }
143143
144- _reader . AdvanceTo ( buffer . GetPosition ( bytesConsumed ) ) ;
144+ _reader . AdvanceTo ( readBuffer . GetPosition ( bytesConsumed ) ) ;
145145 return toCopy ;
146146 }
147147 }
0 commit comments