Handle completely undecoded input in term (Bug#29918)
* lisp/term.el (term-emulate-terminal): Avoid errors if the whole decoded string is eight-bit characters. Don't attempt to save the string for next iteration in that case. * test/lisp/term-tests.el (term-decode-partial) (term-undecodable-input): New tests.
This commit is contained in:
parent
021f32cca1
commit
150bdfe43a
2 changed files with 24 additions and 4 deletions
|
@ -2900,11 +2900,12 @@ See `term-prompt-regexp'."
|
|||
;; next time.
|
||||
(when (= funny str-length)
|
||||
(let ((partial 0))
|
||||
(while (eq (char-charset (aref decoded-substring
|
||||
(- count 1 partial)))
|
||||
'eight-bit)
|
||||
(while (and (< partial count)
|
||||
(eq (char-charset (aref decoded-substring
|
||||
(- count 1 partial)))
|
||||
'eight-bit))
|
||||
(cl-incf partial))
|
||||
(when (> partial 0)
|
||||
(when (> count partial 0)
|
||||
(setq term-terminal-undecoded-bytes
|
||||
(substring decoded-substring (- partial)))
|
||||
(setq decoded-substring
|
||||
|
|
|
@ -144,6 +144,25 @@ This is a reduced example from GNU nano's initial screen."
|
|||
`("\e[1;3r" "\e[2;1H" ,x "\r\e[1A" ,y))
|
||||
(concat y "\n" x)))))
|
||||
|
||||
(ert-deftest term-decode-partial () ;; Bug#25288.
|
||||
"Test multibyte characters sent into multiple chunks."
|
||||
;; Set `locale-coding-system' so test will be deterministic.
|
||||
(let* ((locale-coding-system 'utf-8-unix)
|
||||
(string (make-string 7 ?ш))
|
||||
(bytes (encode-coding-string string locale-coding-system)))
|
||||
(should (equal string
|
||||
(term-test-screen-from-input
|
||||
40 1 `(,(substring bytes 0 (/ (length bytes) 2))
|
||||
,(substring bytes (/ (length bytes) 2))))))))
|
||||
|
||||
(ert-deftest term-undecodable-input () ;; Bug#29918.
|
||||
"Undecodable bytes should be passed through without error."
|
||||
(let* ((locale-coding-system 'utf-8-unix) ; As above.
|
||||
(bytes "\376\340\360\370")
|
||||
(string (decode-coding-string bytes locale-coding-system)))
|
||||
(should (equal string
|
||||
(term-test-screen-from-input
|
||||
40 1 bytes)))))
|
||||
|
||||
(provide 'term-tests)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue