From f9b2f9565cb87efd16cb40a998a50f7c6780c6e8 Mon Sep 17 00:00:00 2001 From: Archs Date: Sun, 1 Mar 2015 00:33:40 +0800 Subject: [PATCH 1/2] streams.ssWriteData: calling setLen only when new data truely increases the underlying string buffer --- lib/pure/streams.nim | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/pure/streams.nim b/lib/pure/streams.nim index 67c80e5926..1ba0fb9aaf 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: + if bufLen <= 0: + return + if s.pos + bufLen > s.data.len(): setLen(s.data, s.data.len + bufLen) - copyMem(addr(s.data[s.pos]), buffer, bufLen) - inc(s.pos, bufLen) + copyMem(addr(s.data[s.pos]), buffer, bufLen) + inc(s.pos, bufLen) proc ssClose(s: Stream) = var s = StringStream(s) From 758a883cc6d876646fb31084e361e49b54b89090 Mon Sep 17 00:00:00 2001 From: Archs Date: Wed, 4 Mar 2015 00:28:18 +0800 Subject: [PATCH 2/2] set the correct length for s.data when data truely increased --- lib/pure/streams.nim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pure/streams.nim b/lib/pure/streams.nim index 1ba0fb9aaf..e706f20160 100644 --- a/lib/pure/streams.nim +++ b/lib/pure/streams.nim @@ -226,8 +226,8 @@ proc ssWriteData(s: Stream, buffer: pointer, bufLen: int) = var s = StringStream(s) if bufLen <= 0: return - if s.pos + bufLen > s.data.len(): - setLen(s.data, s.data.len + bufLen) + 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)