diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2023-09-08 23:05:57 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-08 17:05:57 +0200 |
commit | 5f13e15e0a6f90c462a71cd30addc677f688c4dc (patch) | |
tree | 570db0a6752e27908af4e85347834b68a577a43b /lib | |
parent | d45270bdf721e195a9dae344f9a3285d066c3932 (diff) | |
download | Nim-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.nim | 6 |
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 |