runtime/rfc2822-headers: Check for the eof-object.
authorMatt Birkholz <matt@birchwood-abbey.net>
Sat, 24 Nov 2018 22:47:36 +0000 (15:47 -0700)
committerMatt Birkholz <matt@birchwood-abbey.net>
Sat, 24 Nov 2018 22:47:36 +0000 (15:47 -0700)
src/runtime/rfc2822-headers.scm

index cf48079370f50eeb9faca3cfc4265458e6a2648c..ed181e8c7f3ac674e6ac5e1409925079a6b05d5b 100644 (file)
@@ -191,14 +191,18 @@ USA.
                       byte
                       (builder)))
                  ((fix:= 13 byte)
-                  (if (fix:= 10 (peek-u8 port))
-                      (read-u8 port)
-                      (parse-error port "Invalid line ending:"
-                                   'read-ascii-line))
+                  (let ((byte (peek-u8 port)))
+                    (cond ((eof-object? byte)
+                           (parse-error port "Invalid line ending:"
+                                        'read-ascii-line))
+                          ((fix:= 10 byte)
+                           (read-u8 port))
+                          (else
+                           (parse-error port "Invalid line ending:"
+                                        'read-ascii-line))))
                   (builder))
                  ((fix:= 10 byte)
-                  (parse-error port "Invalid line ending:" 'read-ascii-line)
-                  (builder))
+                  (parse-error port "Invalid line ending:" 'read-ascii-line))
                  ((and (fix:<= 32 byte) (fix:<= byte 126))
                   (builder (integer->char byte))
                   (loop))
@@ -208,9 +212,11 @@ USA.
 
 (define (peek-ascii-char port)
   (let ((byte (peek-u8 port)))
-    (if (eof-object? byte)
-       byte
-       (integer->char byte))))
+    (cond ((eof-object? byte)
+          byte)
+         ((and (fix:<= 32 byte) (fix:<= byte 126))
+          (integer->char byte))
+         (else (parse-error port "Illegal character:" 'peek-ascii-char)))))
 
 (define (skip-wsp-left string start end)
   (let loop ((i start))