[Orc] fixes "streams.readDataStr segafaults" when accepting a string literal (#20019) [backport]

fixes streams.readDataStr accept a string literal

(cherry picked from commit 286fcef68e)
This commit is contained in:
flywind
2022-07-15 15:42:54 +08:00
committed by narimiran
parent 9508b06513
commit e9d5a9d395
2 changed files with 15 additions and 0 deletions

View File

@@ -1194,6 +1194,11 @@ else: # after 1.3 or JS not defined
proc ssReadDataStr(s: Stream, buffer: var string, slice: Slice[int]): int =
var s = StringStream(s)
when nimvm:
discard
else:
when declared(prepareMutation):
prepareMutation(buffer) # buffer might potentially be a CoW literal with ARC
result = min(slice.b + 1 - slice.a, s.data.len - s.pos)
if result > 0:
jsOrVmBlock:

View File

@@ -85,3 +85,13 @@ block:
static: # Ensure streams it doesnt break with nimscript on arc/orc #19716
let s = newStringStream("a")
doAssert s.data == "a"
template main =
var strm = newStringStream("abcde")
var buffer = "12345"
doAssert strm.readDataStr(buffer, 0..3) == 4
doAssert buffer == "abcd5"
strm.close()
static: main()
main()