From: Mattias Engdegård Date: Sat, 5 Jul 2025 11:20:18 +0000 (+0200) Subject: Read non-ASCII chars from unibyte string sources as raw bytes X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=4452d51fd248918bcc49b99de9d90c758fa3c80f;p=emacs.git Read non-ASCII chars from unibyte string sources as raw bytes Previously, latin-1 was incorrectly assumed (bug#70988). * src/lread.c (readchar): Convert to raw byte. * test/src/lread-tests.el (lread-unibyte-string-source): New test. (cherry picked from commit d13693ef4ec9428e2356b0de29913d533c5c4382) --- diff --git a/src/lread.c b/src/lread.c index 6cd6735a215..5d9bdb065e8 100644 --- a/src/lread.c +++ b/src/lread.c @@ -382,6 +382,8 @@ readchar (Lisp_Object readcharfun, bool *multibyte) else { c = SREF (readcharfun, read_from_string_index_byte); + if (!ASCII_CHAR_P (c)) + c = BYTE8_TO_CHAR (c); read_from_string_index++; read_from_string_index_byte++; } diff --git a/test/src/lread-tests.el b/test/src/lread-tests.el index d832cc9aa4e..d9b31a6c438 100644 --- a/test/src/lread-tests.el +++ b/test/src/lread-tests.el @@ -392,4 +392,10 @@ literals (Bug#20852)." (val (read (lambda () (pop s))))) (should (equal (symbol-name val) "A∪ÿ")))) +(ert-deftest lread-unibyte-string-source () + (let* ((src "\"a\xff\"") + (val (read src))) + (should (equal val "a\xff")) ; not "aÿ" + (should-not (multibyte-string-p val)))) + ;;; lread-tests.el ends here