diff --git a/lib/pure/streams.nim b/lib/pure/streams.nim index 77f384a79a..dc00271a5d 100644 --- a/lib/pure/streams.nim +++ b/lib/pure/streams.nim @@ -242,7 +242,7 @@ proc readDataStr*(s: Stream, buffer: var string, slice: Slice[int]): int = result = s.readDataStrImpl(s, buffer, slice) else: # fallback - result = s.readData(addr buffer[0], buffer.len) + result = s.readData(addr buffer[slice.a], slice.b + 1 - slice.a) template jsOrVmBlock(caseJsOrVm, caseElse: untyped): untyped = when nimvm: diff --git a/tests/stdlib/tstreams.nim b/tests/stdlib/tstreams.nim index 354bdf60f5..6979bae389 100644 --- a/tests/stdlib/tstreams.nim +++ b/tests/stdlib/tstreams.nim @@ -6,6 +6,7 @@ Nice name: Arne fs is: nil threw exception +_heh_ ''' nimout: ''' I @@ -49,3 +50,15 @@ block tstreams3: for line in s.lines: echo line s.close + +# bug #12410 + +var a = newStringStream "hehohihahuhyh" +a.readDataStrImpl = nil + +var buffer = "_ooo_" + +doAssert a.readDataStr(buffer, 1..3) == 3 + +echo buffer +