~ chicken-core (chicken-5) fa97b396f13b36ad8179c6a485a37e001ee272f7
commit fa97b396f13b36ad8179c6a485a37e001ee272f7
Author: Evan Hanson <evhan@foldling.org>
AuthorDate: Sat Dec 21 20:20:49 2013 +1300
Commit: Peter Bex <peter.bex@xs4all.nl>
CommitDate: Tue Dec 24 18:52:02 2013 +0100
Signal read errors on unterminated string literals ending with '\'
Signed-off-by: Peter Bex <peter.bex@xs4all.nl>
diff --git a/library.scm b/library.scm
index e9e2dc7a..fe545394 100644
--- a/library.scm
+++ b/library.scm
@@ -2574,7 +2574,9 @@ EOF
"escaped whitespace, but no newline - collapsing anyway"))
(loop c lst)))))
(else
- (cond ((and (char-numeric? c)
+ (cond ((##core#inline "C_eofp" c)
+ (##sys#read-error port "unterminated string"))
+ ((and (char-numeric? c)
(char>=? c #\0)
(char<=? c #\7))
(let ((ch (integer->char
diff --git a/tests/library-tests.scm b/tests/library-tests.scm
index cdf6b092..562f8846 100644
--- a/tests/library-tests.scm
+++ b/tests/library-tests.scm
@@ -364,6 +364,19 @@
(assert (every keyword? (with-input-from-string "(42: abc: .: #:: ::)" read)))
+;;; reading unterminated objects
+
+(assert-fail (with-input-from-string "(" read))
+(assert-fail (with-input-from-string "(1 . 2" read))
+(assert-fail (with-input-from-string "|" read))
+(assert-fail (with-input-from-string "\"" read))
+(assert-fail (with-input-from-string "#|" read))
+(assert-fail (with-input-from-string "#(" read))
+(assert-fail (with-input-from-string "#${" read))
+(assert-fail (with-input-from-string "\\" read))
+(assert-fail (with-input-from-string "|\\" read))
+(assert-fail (with-input-from-string "\"\\" read))
+
;;; setters
(define x '(a b c))
Trap