A bad UTF-8 decoder

(let ((in-byte (read-byte s nil nil))) (cond ((null in-byte) :eof) ((eq #b11100000 (logand #b11110000 in-byte)) (let* ((in-byte2 (read-byte s nil nil)) (in-byte3 (read-byte s nil nil))) (code-char (logior (ash (logand #b00011111 in-byte) 12) (ash (logand #b00111111 in-byte2) 6) (logand #b00111111 in-byte3))))) ((eq #b11000000 (logand #b11100000 in-byte)) (let* ((in-byte2 (read-byte s nil nil))) (code-char (logior (ash (logand #b00011111 in-byte) 6) (logand #b00111111 in-byte2))))) (t (code-char in-byte))))