authorgravatar for vulfox91@gmail.comDustin Taylor <vulfox91@gmail.com> 2021-06-08 11:34:57-06:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2021-06-08 20:34:57+03:00
logc34e9c73aba671e7d79117d29c06a66ae24367c5
tree98ba90d700a08e2be594bcd5d723ab9084f43093
parent032204ffe79a9686560c2638eda4af649bfd9dd4
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Limit Fixed Buffer Stream seekTo (#9023)


1 files changed, 11 insertions(+), 4 deletions(-)

lib/std/io/fixed_buffer_stream.zig+11-4
...@@ -81,7 +81,7 @@ pub fn FixedBufferStream(comptime Buffer: type) type {...@@ -81,7 +81,7 @@ pub fn FixedBufferStream(comptime Buffer: type) type {
81 }81 }
8282
83 pub fn seekTo(self: *Self, pos: u64) SeekError!void {83 pub fn seekTo(self: *Self, pos: u64) SeekError!void {
84 self.pos = if (std.math.cast(usize, pos)) |x| x else |_| self.buffer.len;84 self.pos = if (std.math.cast(usize, pos)) |x| std.math.min(self.buffer.len, x) else |_| self.buffer.len;
85 }85 }
8686
87 pub fn seekBy(self: *Self, amt: i64) SeekError!void {87 pub fn seekBy(self: *Self, amt: i64) SeekError!void {
...@@ -155,6 +155,9 @@ test "FixedBufferStream output 2" {...@@ -155,6 +155,9 @@ test "FixedBufferStream output 2" {
155155
156 try testing.expectError(error.NoSpaceLeft, fbs.writer().writeAll("Hello world!"));156 try testing.expectError(error.NoSpaceLeft, fbs.writer().writeAll("Hello world!"));
157 try testing.expect(mem.eql(u8, fbs.getWritten(), "Hello worl"));157 try testing.expect(mem.eql(u8, fbs.getWritten(), "Hello worl"));
158
159 try fbs.seekTo((try fbs.getEndPos()) + 1);
160 try testing.expectError(error.NoSpaceLeft, fbs.writer().writeAll("H"));
158}161}
159162
160test "FixedBufferStream input" {163test "FixedBufferStream input" {
...@@ -163,14 +166,18 @@ test "FixedBufferStream input" {...@@ -163,14 +166,18 @@ test "FixedBufferStream input" {
163166
164 var dest: [4]u8 = undefined;167 var dest: [4]u8 = undefined;
165168
166 var read = try fbs.reader().read(dest[0..4]);169 var read = try fbs.reader().read(&dest);
167 try testing.expect(read == 4);170 try testing.expect(read == 4);
168 try testing.expect(mem.eql(u8, dest[0..4], bytes[0..4]));171 try testing.expect(mem.eql(u8, dest[0..4], bytes[0..4]));
169172
170 read = try fbs.reader().read(dest[0..4]);173 read = try fbs.reader().read(&dest);
171 try testing.expect(read == 3);174 try testing.expect(read == 3);
172 try testing.expect(mem.eql(u8, dest[0..3], bytes[4..7]));175 try testing.expect(mem.eql(u8, dest[0..3], bytes[4..7]));
173176
174 read = try fbs.reader().read(dest[0..4]);177 read = try fbs.reader().read(&dest);
178 try testing.expect(read == 0);
179
180 try fbs.seekTo((try fbs.getEndPos()) + 1);
181 read = try fbs.reader().read(&dest);
175 try testing.expect(read == 0);182 try testing.expect(read == 0);
176}183}