authenticate: Encode strings as ISO-8859-1.

Fixes <https://bugs.gnu.org/43421>.

* guix/scripts/authenticate.scm (read-command): Decode strings as
ISO-8859-1, not UTF-8.
(guix-authenticate)[send-reply]: Encode strings as ISO-8859-1, not
UTF-8.
* tests/guix-authenticate.sh: Add test.
This commit is contained in:
Ludovic Courtès 2020-09-15 14:24:05 +02:00
parent 1b157bbef0
commit b911d65474
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 14 additions and 3 deletions

View file

@ -31,6 +31,7 @@
#:use-module (ice-9 rdelim)
#:use-module (ice-9 match)
#:use-module (ice-9 vlist)
#:use-module (ice-9 iconv)
#:export (guix-authenticate))
;;; Commentary:
@ -122,8 +123,9 @@ by colon, followed by the given number of characters."
(reverse result))
(else
(let* ((len (string->number (read-delimited ":" port)))
(str (utf8->string
(get-bytevector-n port len))))
(str (bytevector->string
(get-bytevector-n port len)
"ISO-8859-1" 'error)))
(loop (cons str result))))))))))
(define-syntax define-enumerate-type ;TODO: factorize
@ -150,7 +152,7 @@ by colon, followed by the given number of characters."
(define (send-reply code str)
;; Send CODE and STR as a reply to our client.
(let ((bv (string->utf8 str)))
(let ((bv (string->bytevector str "ISO-8859-1" 'error)))
(format #t "~a ~a:" code (bytevector-length bv))
(put-bytevector (current-output-port) bv)
(force-output (current-output-port))))