Skip to content

Commit 9cf5343

Browse files
authored
Fix reading nested NoopStreams with sharebuf=false produces garbage data (#187)
1 parent 96d5147 commit 9cf5343

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

src/noop.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ function fillbuffer(stream::NoopStream; eager::Bool = false)
174174
changemode!(stream, :read)
175175
buffer = stream.buffer1
176176
@assert buffer === stream.buffer2
177-
if stream.stream isa TranscodingStream && buffer === stream.buffer1
177+
if stream.stream isa TranscodingStream && buffer === stream.stream.buffer1
178178
# Delegate the operation when buffers are shared.
179179
return fillbuffer(stream.stream, eager = eager)
180180
end

test/codecnoop.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,19 @@
139139
@test read(stream) == b"foobar"
140140
close(stream)
141141

142+
stream = NoopStream(NoopStream(IOBuffer("foobar")); sharedbuf=false)
143+
@test read(stream) == b"foobar"
144+
close(stream)
145+
146+
stream = NoopStream(NoopStream(IOBuffer("foobar")); sharedbuf=false)
147+
@test map(x->read(stream, UInt8), 1:6) == b"foobar"
148+
@test eof(stream)
149+
close(stream)
150+
151+
stream = NoopStream(NoopStream(NoopStream(IOBuffer("foobar")); sharedbuf=false))
152+
@test read(stream) == b"foobar"
153+
close(stream)
154+
142155
# Two buffers are the same object.
143156
stream = NoopStream(IOBuffer("foo"))
144157
@test stream.buffer1 === stream.buffer2

0 commit comments

Comments
 (0)