[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#29918: 26.0.90; serial-term error in process filter
From: |
Noam Postavsky |
Subject: |
bug#29918: 26.0.90; serial-term error in process filter |
Date: |
Wed, 17 Jul 2019 07:36:34 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.2.90 (gnu/linux) |
Lars Ingebrigtsen <larsi@gnus.org> writes:
> Gemini Lasswell <gazally@runbox.com> writes:
>
>> Lars Ingebrigtsen <larsi@gnus.org> writes:
>>
>>> Does setting (setq debug-on-error t) give you a backtrace for these
>>> errors?
>>
>> No, but I just made one happen by removing the internal_condition_case_1
>> wrapper on the read_process_output_call in
>> read_and_dispose_of_process_output.
>> Then after I got the first backtrace showing that the error was in
>> term-emulate-terminal I eval-defun'd it to make a more useful backtrace:
>>
>> Debugger entered--Lisp error: (args-out-of-range
>> "\376\374\376\364\376\364\376\364\376\364\376\364\376\364\376\364\376\364\376\364\376\364\376\364\376"
>> -1)
>>
>> aref("\376\374\376\364\376\364\376\364\376\364\376\364\376\364\376\364\376\364\376\364\376\364\376\364\376"
>> -1)
>> (char-charset (aref decoded-substring (- count 1 partial)))
>
> I'm guessing this bug was introduced by:
>
> commit 47019a521f774fbd13441e178a6a82c9989b9912
> Author: Noam Postavsky <npostavs@gmail.com>
> Date: Thu Jan 18 08:22:47 2018 -0500
>
> Switch term.el to lexical binding, and clean up code a bit
It can't be that patch, because it's only in master, not emacs-26. I
think it's rather [1: 134e86b360] (also mine).
[1: 134e86b360]: 2017-01-03 08:58:40 -0500
Handle multibyte chars spanning chunks in term.el
https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=134e86b360cab0d0a5cb634b71a4b06ec26c5f1f
If I understand the backtrace correctly, then the problem is that I
didn't think of the case where the whole string fails to decode. I
think the patch below should fix it; there is a possibility it prevents
correct decoding in case the terminal receives a utf-8 character in
single byte chunks (though I'm not sure if it's even valid for a program
to emit single bytes like that).
>From 3e2663f8366ea82f52f47019b63fca243e3f88d9 Mon Sep 17 00:00:00 2001
From: Noam Postavsky <npostavs@gmail.com>
Date: Wed, 17 Jul 2019 07:20:20 -0400
Subject: [PATCH] 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.
---
lisp/term.el | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/lisp/term.el b/lisp/term.el
index cbef68dc0a..9785ce3024 100644
--- a/lisp/term.el
+++ b/lisp/term.el
@@ -2900,11 +2900,12 @@ term-emulate-terminal
;; 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
--
2.11.0
- bug#29918: 26.0.90; serial-term error in process filter, Lars Ingebrigtsen, 2019/07/14
- bug#29918: 26.0.90; serial-term error in process filter, Gemini Lasswell, 2019/07/15
- bug#29918: 26.0.90; serial-term error in process filter, Lars Ingebrigtsen, 2019/07/17
- bug#29918: 26.0.90; serial-term error in process filter,
Noam Postavsky <=
- bug#29918: 26.0.90; serial-term error in process filter, Eli Zaretskii, 2019/07/18
- bug#29918: 26.0.90; serial-term error in process filter, Noam Postavsky, 2019/07/18
- bug#29918: 26.0.90; serial-term error in process filter, Eli Zaretskii, 2019/07/18
- bug#29918: 26.0.90; serial-term error in process filter, Noam Postavsky, 2019/07/18
- bug#29918: 26.0.90; serial-term error in process filter, Gemini Lasswell, 2019/07/20
- bug#29918: 26.0.90; serial-term error in process filter, Noam Postavsky, 2019/07/20
- bug#29918: 26.0.90; serial-term error in process filter, Stefan Monnier, 2019/07/21
- bug#29918: 26.0.90; serial-term error in process filter, Eli Zaretskii, 2019/07/21
- bug#29918: 26.0.90; serial-term error in process filter, Lars Ingebrigtsen, 2019/07/21
- bug#29918: 26.0.90; serial-term error in process filter, Eli Zaretskii, 2019/07/21