-
Notifications
You must be signed in to change notification settings - Fork 0
/
nano-5.8-die-infinite-recursion.patch
82 lines (65 loc) · 2.69 KB
/
nano-5.8-die-infinite-recursion.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
From 67ee5ab6af622666d8caf4127e945c941698b816 Mon Sep 17 00:00:00 2001
From: Benno Schulenberg <bensberg@telfort.nl>
Date: Tue, 29 Jun 2021 12:51:44 +0200
Subject: [PATCH 1/2] feedback: when not in curses mode, just skip displaying
any message
Calling die() could trigger another call of emergency_save(), which
could fail and cause another call to statusline(), which would call
die() again... Spiralling until stack space runs out.
This fixes https://savannah.gnu.org/bugs/?60853.
Bug existed since version 5.1, commit 7942dab0.
Original report was in https://bugzilla.redhat.com/1976410.
Reported-by: Souptik Dutta Roy <duttaroy.souptik@gmail.com>
Upstream-commit: fc01c5a10ee729d6f82e109890b593aef976205e
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
---
src/winio.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/winio.c b/src/winio.c
index 72f4f95..345fb19 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -2255,8 +2255,9 @@ void statusline(message_type importance, const char *msg, ...)
UNSET(WHITESPACE_DISPLAY);
+ /* When not in curses mode, there is no status bar to display anything on. */
if (isendwin())
- die("Out of curses -- please report a bug\n");
+ return;
#endif
/* Ignore a message with an importance that is lower than the last one. */
--
2.31.1
From 242cde94e13352ef97c048a5c8c6ddbf83d7c9a4 Mon Sep 17 00:00:00 2001
From: Benno Schulenberg <bensberg@telfort.nl>
Date: Tue, 29 Jun 2021 13:20:16 +0200
Subject: [PATCH 2/2] input: give up on the input stream only after millions of
errors
This mitigates a problem seen sometimes among the Red Hat crash reports:
somehow wgetch() keeps returning ERR, as if it were in nodelay mode.
(I've seen this happen once after nano came out of suspension.)
Using a much larger error-count value gives the user a few seconds
to type something and hopefully get out of the error condition.
Upstream-commit: 8d1a666dcfbb9e9fcf6ce7a875a4ad4f5ea932ce
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
---
src/winio.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/winio.c b/src/winio.c
index 345fb19..744562f 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -233,11 +233,11 @@ void read_keys_from(WINDOW *win)
}
}
#endif
- /* When we've failed to get a keycode over a hundred times in a row,
+ /* When we've failed to get a keycode millions of times in a row,
* assume our input source is gone and die gracefully. We could
* check if errno is set to EIO ("Input/output error") and die in
* that case, but it's not always set properly. Argh. */
- if (input == ERR && ++errcount == 123)
+ if (input == ERR && ++errcount == 12345678)
die(_("Too many errors from stdin\n"));
}
--
2.31.1