summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2020-02-21 21:06:41 +0100
committerGitHub <noreply@github.com>2020-02-21 21:06:41 +0100
commit0d219d2c67cdf123fbc38aade3974edef5ee9f8b (patch)
treec846e32ccfca6f52580e08f7e4a0b075484252b4 /lib
parente05aca8734702f0ad4beb0625780d354d7168bc7 (diff)
downloadNim-0d219d2c67cdf123fbc38aade3974edef5ee9f8b.tar.gz
fixes #13457 (#13458)
Diffstat (limited to 'lib')
-rw-r--r--lib/system/strs_v2.nim21
1 files changed, 11 insertions, 10 deletions
diff --git a/lib/system/strs_v2.nim b/lib/system/strs_v2.nim
index 6f28ad237..3beb14382 100644
--- a/lib/system/strs_v2.nim
+++ b/lib/system/strs_v2.nim
@@ -38,14 +38,13 @@ proc resize(old: int): int {.inline.} =
 
 proc prepareAdd(s: var NimStringV2; addlen: int) {.compilerRtl.} =
   if isLiteral(s):
-    if addlen > 0:
-      let oldP = s.p
-      # can't mutate a literal, so we need a fresh copy here:
-      s.p = cast[ptr NimStrPayload](allocShared0(contentSize(s.len + addlen)))
-      s.p.cap = s.len + addlen
-      if s.len > 0:
-        # we are about to append, so there is no need to copy the \0 terminator:
-        copyMem(unsafeAddr s.p.data[0], unsafeAddr oldP.data[0], s.len)
+    let oldP = s.p
+    # can't mutate a literal, so we need a fresh copy here:
+    s.p = cast[ptr NimStrPayload](allocShared0(contentSize(s.len + addlen)))
+    s.p.cap = s.len + addlen
+    if s.len > 0:
+      # we are about to append, so there is no need to copy the \0 terminator:
+      copyMem(unsafeAddr s.p.data[0], unsafeAddr oldP.data[0], s.len)
   else:
     let oldCap = s.p.cap and not strlitFlag
     if s.len + addlen > oldCap:
@@ -110,8 +109,10 @@ proc setLengthStrV2(s: var NimStringV2, newLen: int) {.compilerRtl.} =
   if newLen == 0:
     frees(s)
     s.p = nil
-  elif newLen > s.len or isLiteral(s):
-    prepareAdd(s, newLen - s.len)
+  else:
+    if newLen > s.len or isLiteral(s):
+      prepareAdd(s, newLen - s.len)
+    s.p.data[newLen] = '\0'
   s.len = newLen
 
 proc nimAsgnStrV2(a: var NimStringV2, b: NimStringV2) {.compilerRtl.} =