Skip to content

Commit 37d9347

Browse files
committed
fix skip
1 parent 10788ca commit 37d9347

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/stream.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ function Base.skip(stream::TranscodingStream, offset::Integer)
135135
buffer1 = stream.state.buffer1
136136
skipped = 0
137137
if state == :read
138-
while buffersize(buffer1) < offset - skipped && !eof(stream)
138+
while !eof(stream) && buffersize(buffer1) < offset - skipped
139139
n = buffersize(buffer1)
140140
emptybuffer!(buffer1)
141141
skipped += n

test/runtests.jl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,21 @@ using Base.Test
6363
@test read(stream, UInt8) == data[3]
6464
skip(stream, 5)
6565
@test read(stream, UInt8) == data[9]
66+
skip(stream, 7)
67+
@test eof(stream)
68+
close(stream)
69+
70+
# skip offset > bufsize
71+
data = collect(0x00:0x0f)
72+
stream = TranscodingStream(Identity(), IOBuffer(data), bufsize=2)
73+
@test read(stream, UInt8) == data[1]
74+
skip(stream, 4)
75+
@test read(stream, UInt8) == data[6]
76+
skip(stream, 3)
77+
@test read(stream, UInt8) == data[10]
78+
skip(stream, 6)
79+
@test eof(stream)
80+
close(stream)
6681

6782
s = TranscodingStream(Identity(), IOBuffer(b"baz"))
6883
@test endof(s.state.buffer1) == 0
@@ -94,6 +109,8 @@ using Base.Test
94109
TranscodingStreams.test_roundtrip_read(IdentityStream, IdentityStream)
95110
TranscodingStreams.test_roundtrip_write(IdentityStream, IdentityStream)
96111
TranscodingStreams.test_roundtrip_lines(IdentityStream, IdentityStream)
112+
113+
@test_throws ArgumentError TranscodingStream(Identity(), IOBuffer(), bufsize=0)
97114
end
98115

99116
for pkg in ["CodecZlib", "CodecBzip2", "CodecXz", "CodecZstd"]

0 commit comments

Comments
 (0)