* alexandria-1/io.lisp: (read-stream-content-into-string): fix recent
lossage: This addresses problems in commits (13b1575, 6ff6820,
9c97e6f, on 2021-10-24), which changed the element-type of the array
used by READ-SEQUENCE to read from the stream from CHARACTER to the
STREAM-ELEMENT-TYPE of the stream.
On CCL, ECL etc. this breaks nyxt's source/start.lisp:(listen-socket)
which basically does
(iolib:with-open-socket (s :address-family :local :connect :passive :local-filename "/tmp/foo")
(alexandria:read-stream-content-into-string (iolib:accept-connection s)))
Iolib returns an octet stream for which the STREAM-ELEMENT-TYPE is not
CHARACTER. READ-STREAM-CONTENT-INTO-STRING uses WITH-OUTPUT-TO-STRING
and that calls MAKE-STRING-OUTPUT-STREAM, the argument
:ELEMENT-TYPE ((UNSIGNED-BYTE 8)) which fails because it must be a
subtype of character
The present fix is to check if it is not a character stream and force
set the element-type to 'character if it is not.
---
alexandria-1/io.lisp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/alexandria-1/io.lisp b/alexandria-1/io.lisp
index d3be536..8c93dd6 100644
--- a/alexandria-1/io.lisp
+++ b/alexandria-1/io.lisp
@@ -65,6 +65,8 @@ (defun read-stream-content-into-string (stream &key (buffer-size 4096))
(check-type buffer-size positive-integer)
(let ((*print-pretty* nil)
(element-type (stream-element-type stream)))
+ (unless (subtypep element-type 'character)
+ (setq element-type 'character))
(with-output-to-string (datum nil :element-type element-type)
(let ((buffer (make-array buffer-size :element-type element-type)))
(loop
--
2.35.1.dirty