authorgravatar for tgschultz@gmail.comtgschultz <tgschultz@gmail.com> 2018-11-30 14:31:08-06:00
committergravatar for tgschultz@gmail.comtgschultz <tgschultz@gmail.com> 2018-11-30 14:50:17-06:00
log5936bdf8a4163d0c75444e5c8554316de63e3864
treecf955950658ae425666560bc8e563989cb22b2c4
parentb6489ff90afffcf0c69490efcb5941f3bb42fc3c

Fixed readBits to cast errors to the correct errorset. See #1810 for why this wasn't caught earlier.


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

std/io.zig+3-1
......@@ -526,7 +526,9 @@ pub fn BitInStream(endian: builtin.Endian, comptime Error: type) type {
526526 if (err == error.EndOfStream) {
527527 return @intCast(U, out_buffer);
528528 }
529 return err;
529 //@BUG: See #1810. Not sure if the bug is that I have to do this for some
530 // streams, or that I don't for streams with emtpy errorsets.
531 return @errSetCast(Error, err);
530532 };
531533
532534 switch (endian) {
std/io_test.zig+8
......@@ -169,6 +169,10 @@ test "BitInStream" {
169169 assert(out_bits == 16);
170170
171171 _ = try bit_stream_be.readBits(u0, 0, &out_bits);
172
173 assert(0 == try bit_stream_be.readBits(u1, 1, &out_bits));
174 assert(out_bits == 0);
175 assertError(bit_stream_be.readBitsNoEof(u1, 1), error.EndOfStream);
172176
173177 var mem_in_le = io.SliceInStream.init(mem_le[0..]);
174178 var bit_stream_le = io.BitInStream(builtin.Endian.Little, InError).init(&mem_in_le.stream);
......@@ -197,6 +201,10 @@ test "BitInStream" {
197201 assert(out_bits == 16);
198202
199203 _ = try bit_stream_le.readBits(u0, 0, &out_bits);
204
205 assert(0 == try bit_stream_le.readBits(u1, 1, &out_bits));
206 assert(out_bits == 0);
207 assertError(bit_stream_le.readBitsNoEof(u1, 1), error.EndOfStream);
200208}
201209
202210test "BitOutStream" {