ref: 5209a8864aa07897b5d3c7cf07e238f318337932
parent: 6efc3cb390b56e0d5d645098bdd372dbef959445
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Tue Jan 28 20:19:45 EST 2025
string-char: throw bounds error instead of returning #\nul if went past the string
--- a/src/string.c
+++ b/src/string.c
@@ -214,7 +214,7 @@
size_t startbytes, n, startchar = tosize(args[1]);
for(startbytes = n = 0; n < startchar && startbytes < lenbytes; n++)
startbytes += u8_seqlen(s+startbytes);
- if(n != startchar)
+ if(n != startchar || startbytes >= lenbytes)
bounds_error(args[0], args[1]);
Rune r;
chartorune(&r, s+startbytes);
--- a/test/unittest.lsp
+++ b/test/unittest.lsp
@@ -521,5 +521,9 @@
(assert (equal? '("пр" "вет" "пок" "") (string-split s "аи\0"))) (assert (equal? '("" "") (string-split "1" "1")))+(assert (equal? #\а (string-char s 10)))
+(assert (equal? #\nul (string-char s 6)))
+(assert-fail (string-char s 11))
+
(princ "all tests pass")
(newline)
--
⑨