summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authorringabout <43030857+ringabout@users.noreply.github.com>2023-09-08 23:05:57 +0800
committerGitHub <noreply@github.com>2023-09-08 17:05:57 +0200
commit5f13e15e0a6f90c462a71cd30addc677f688c4dc (patch)
tree570db0a6752e27908af4e85347834b68a577a43b /lib
parentd45270bdf721e195a9dae344f9a3285d066c3932 (diff)
downloadNim-5f13e15e0a6f90c462a71cd30addc677f688c4dc.tar.gz
fixes #22664; guard against potential seqs self assignments (#22671)
fixes #22664
Diffstat (limited to 'lib')
-rw-r--r--lib/system/seqs_v2.nim6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/system/seqs_v2.nim b/lib/system/seqs_v2.nim
index 3a49142bf..b71b81762 100644
--- a/lib/system/seqs_v2.nim
+++ b/lib/system/seqs_v2.nim
@@ -32,6 +32,10 @@ type
     len: int
     p: ptr NimSeqPayload[T]
 
+  NimRawSeq = object
+    len: int
+    p: pointer
+
 const nimSeqVersion {.core.} = 2
 
 # XXX make code memory safe for overflows in '*'
@@ -139,6 +143,8 @@ proc newSeq[T](s: var seq[T], len: Natural) =
   shrink(s, 0)
   setLen(s, len)
 
+proc sameSeqPayload(x: pointer, y: pointer): bool {.compilerproc, inline.} =
+  result = cast[ptr NimRawSeq](x)[].p == cast[ptr NimRawSeq](y)[].p
 
 template capacityImpl(sek: NimSeqV2): int =
   if sek.p != nil: (sek.p.cap and not strlitFlag) else: 0