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)
48
48
public static unsafe void Write < T > ( this IBufferWriter < byte > writer , T value )
49
49
where T : unmanaged
50
50
{
51
- int length = sizeof ( T ) ;
52
- Span < byte > span = writer . GetSpan ( 1 ) ;
51
+ Span < byte > span = writer . GetSpan ( sizeof ( T ) ) ;
53
52
54
- if ( span . Length < length )
53
+ if ( span . Length < sizeof ( T ) )
55
54
{
56
55
ThrowArgumentExceptionForEndOfBuffer ( ) ;
57
56
}
@@ -60,7 +59,7 @@ public static unsafe void Write<T>(this IBufferWriter<byte> writer, T value)
60
59
61
60
Unsafe . WriteUnaligned ( ref r0 , value ) ;
62
61
63
- writer . Advance ( length ) ;
62
+ writer . Advance ( sizeof ( T ) ) ;
64
63
}
65
64
66
65
/// <summary>
Original file line number Diff line number Diff line change @@ -118,4 +118,22 @@ public void Test_IBufferWriterExtensions_WriteReadOverItems_ReadOnlySpan()
118
118
119
119
Assert . IsTrue ( span . SequenceEqual ( buffer . AsSpan ( ) ) ) ;
120
120
}
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
+ }
121
139
}
You can’t perform that action at this time.
0 commit comments