diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2015-03-04 03:08:38 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2015-03-04 03:08:38 +0100 |
commit | b1656f2db43213e3ceb509593ec6c4112905f740 (patch) | |
tree | 4e3071fc9e26da43020c74d63568c835cf5a8a2c | |
parent | 171de9c35506f0f6ad509b7f1bf14d19fd09af8d (diff) | |
parent | 758a883cc6d876646fb31084e361e49b54b89090 (diff) | |
download | Nim-b1656f2db43213e3ceb509593ec6c4112905f740.tar.gz |
Merge pull request #2230 from Archs/devel
streams.ssWriteData: Call setLen only when new data truly increases the underlying string buffer
-rw-r--r-- | lib/pure/streams.nim | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/pure/streams.nim b/lib/pure/streams.nim index 67c80e592..e706f2016 100644 --- a/lib/pure/streams.nim +++ b/lib/pure/streams.nim @@ -224,10 +224,12 @@ proc ssReadData(s: Stream, buffer: pointer, bufLen: int): int = proc ssWriteData(s: Stream, buffer: pointer, bufLen: int) = var s = StringStream(s) - if bufLen > 0: - setLen(s.data, s.data.len + bufLen) - copyMem(addr(s.data[s.pos]), buffer, bufLen) - inc(s.pos, bufLen) + if bufLen <= 0: + return + if s.pos + bufLen > s.data.len: + setLen(s.data, s.pos + bufLen) + copyMem(addr(s.data[s.pos]), buffer, bufLen) + inc(s.pos, bufLen) proc ssClose(s: Stream) = var s = StringStream(s) |