File tree Expand file tree Collapse file tree 2 files changed +21
-4
lines changed Expand file tree Collapse file tree 2 files changed +21
-4
lines changed Original file line number Diff line number Diff line change @@ -48,10 +48,9 @@ public static Stream AsStream(this IBufferWriter<byte> writer)
4848 public static unsafe void Write < T > ( this IBufferWriter < byte > writer , T value )
4949 where T : unmanaged
5050 {
51- int length = sizeof ( T ) ;
52- Span < byte > span = writer . GetSpan ( 1 ) ;
51+ Span < byte > span = writer . GetSpan ( sizeof ( T ) ) ;
5352
54- if ( span . Length < length )
53+ if ( span . Length < sizeof ( T ) )
5554 {
5655 ThrowArgumentExceptionForEndOfBuffer ( ) ;
5756 }
@@ -60,7 +59,7 @@ public static unsafe void Write<T>(this IBufferWriter<byte> writer, T value)
6059
6160 Unsafe . WriteUnaligned ( ref r0 , value ) ;
6261
63- writer . Advance ( length ) ;
62+ writer . Advance ( sizeof ( T ) ) ;
6463 }
6564
6665 /// <summary>
Original file line number Diff line number Diff line change @@ -118,4 +118,22 @@ public void Test_IBufferWriterExtensions_WriteReadOverItems_ReadOnlySpan()
118118
119119 Assert . IsTrue ( span . SequenceEqual ( buffer . AsSpan ( ) ) ) ;
120120 }
121+
122+ // See https://github.com/CommunityToolkit/dotnet/issues/798
123+ [ TestMethod ]
124+ public void Test_IBufferWriterExtensions_WriteExceedingFreeCapacity ( )
125+ {
126+ ArrayPoolBufferWriter < byte > writer = new ( ) ;
127+
128+ // Leave only one byte of free capacity
129+ int count = writer . Capacity - 1 ;
130+
131+ for ( int i = 0 ; i < count ; i ++ )
132+ {
133+ writer . Write < byte > ( 0 ) ;
134+ }
135+
136+ // Write 4 bytes
137+ writer . Write ( 1 ) ;
138+ }
121139}
You can’t perform that action at this time.
0 commit comments