Resolves: #1558532 - fix crash of 'nano --restrict when <Insert> is pressed
This commit is contained in:
parent
c9ebb7c245
commit
2f880d0807
147
0001-nano-2.9.4-restrict-crash.patch
Normal file
147
0001-nano-2.9.4-restrict-crash.patch
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
From 4cdad8299f605e8b0527391a49311786e0bca35c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kamil Dudka <kdudka@redhat.com>
|
||||||
|
Date: Tue, 20 Mar 2018 16:49:34 +0100
|
||||||
|
Subject: [PATCH 1/2] input: do not crash if sctofunc() returns NULL
|
||||||
|
|
||||||
|
This fixes a regression introduced by commit 54103d8e: a crash that
|
||||||
|
can be triggered by running 'nano --restrict' and pressing <Insert>.
|
||||||
|
|
||||||
|
This addresses https://bugzilla.redhat.com/1558532.
|
||||||
|
|
||||||
|
Upstream-commit: b830a7dd384495fb9b882f866b26948025abe136
|
||||||
|
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||||
|
---
|
||||||
|
src/nano.c | 16 +++++++++++-----
|
||||||
|
1 file changed, 11 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/nano.c b/src/nano.c
|
||||||
|
index ad95925..e7b6d62 100644
|
||||||
|
--- a/src/nano.c
|
||||||
|
+++ b/src/nano.c
|
||||||
|
@@ -1712,9 +1712,12 @@ int do_input(bool allow_funcs)
|
||||||
|
if (shortcut == NULL)
|
||||||
|
pletion_line = NULL;
|
||||||
|
else {
|
||||||
|
- if (ISSET(VIEW_MODE) && !sctofunc(shortcut)->viewok) {
|
||||||
|
- print_view_warning();
|
||||||
|
- return ERR;
|
||||||
|
+ if (ISSET(VIEW_MODE)) {
|
||||||
|
+ const subnfunc *f = sctofunc(shortcut);
|
||||||
|
+ if (f && !f->viewok) {
|
||||||
|
+ print_view_warning();
|
||||||
|
+ return ERR;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the function associated with this shortcut is
|
||||||
|
@@ -1787,8 +1790,11 @@ int do_input(bool allow_funcs)
|
||||||
|
wrap_reset();
|
||||||
|
#endif
|
||||||
|
#ifdef ENABLE_COLOR
|
||||||
|
- if (!refresh_needed && !sctofunc(shortcut)->viewok)
|
||||||
|
- check_the_multis(openfile->current);
|
||||||
|
+ if (!refresh_needed) {
|
||||||
|
+ const subnfunc *f = sctofunc(shortcut);
|
||||||
|
+ if (f && !f->viewok)
|
||||||
|
+ check_the_multis(openfile->current);
|
||||||
|
+ }
|
||||||
|
#endif
|
||||||
|
if (!refresh_needed && (shortcut->func == do_delete ||
|
||||||
|
shortcut->func == do_backspace))
|
||||||
|
--
|
||||||
|
2.14.3
|
||||||
|
|
||||||
|
|
||||||
|
From 25a02d16fc59bbe88cdc51922534436b20187a3d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Benno Schulenberg <bensberg@telfort.nl>
|
||||||
|
Date: Tue, 20 Mar 2018 19:56:03 +0100
|
||||||
|
Subject: [PATCH 2/2] tweaks: factor out the check for 'viewok' into its own
|
||||||
|
function
|
||||||
|
|
||||||
|
And also prevent a theoretical crash for restricted prompt functions.
|
||||||
|
|
||||||
|
Upstream-commit: 8b8c6bb818b21b9c7fcf7481df7154745b4aad41
|
||||||
|
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||||
|
---
|
||||||
|
src/nano.c | 24 +++++++++++++-----------
|
||||||
|
src/prompt.c | 2 +-
|
||||||
|
src/proto.h | 1 +
|
||||||
|
3 files changed, 15 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/nano.c b/src/nano.c
|
||||||
|
index e7b6d62..c39622b 100644
|
||||||
|
--- a/src/nano.c
|
||||||
|
+++ b/src/nano.c
|
||||||
|
@@ -1621,6 +1621,14 @@ int do_mouse(void)
|
||||||
|
}
|
||||||
|
#endif /* ENABLE_MOUSE */
|
||||||
|
|
||||||
|
+/* Return TRUE when the given shortcut is valid in view mode. */
|
||||||
|
+bool okay_for_view(const sc *shortcut)
|
||||||
|
+{
|
||||||
|
+ const subnfunc *func = sctofunc(shortcut);
|
||||||
|
+
|
||||||
|
+ return (func && func->viewok);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* Read in a keystroke. Act on the keystroke if it is a shortcut or a toggle;
|
||||||
|
* otherwise, insert it into the edit buffer. If allow_funcs is FALSE, don't
|
||||||
|
* do anything with the keystroke -- just return it. */
|
||||||
|
@@ -1712,12 +1720,9 @@ int do_input(bool allow_funcs)
|
||||||
|
if (shortcut == NULL)
|
||||||
|
pletion_line = NULL;
|
||||||
|
else {
|
||||||
|
- if (ISSET(VIEW_MODE)) {
|
||||||
|
- const subnfunc *f = sctofunc(shortcut);
|
||||||
|
- if (f && !f->viewok) {
|
||||||
|
- print_view_warning();
|
||||||
|
- return ERR;
|
||||||
|
- }
|
||||||
|
+ if (ISSET(VIEW_MODE) && !okay_for_view(shortcut)) {
|
||||||
|
+ print_view_warning();
|
||||||
|
+ return ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the function associated with this shortcut is
|
||||||
|
@@ -1790,11 +1795,8 @@ int do_input(bool allow_funcs)
|
||||||
|
wrap_reset();
|
||||||
|
#endif
|
||||||
|
#ifdef ENABLE_COLOR
|
||||||
|
- if (!refresh_needed) {
|
||||||
|
- const subnfunc *f = sctofunc(shortcut);
|
||||||
|
- if (f && !f->viewok)
|
||||||
|
- check_the_multis(openfile->current);
|
||||||
|
- }
|
||||||
|
+ if (!refresh_needed && !okay_for_view(shortcut))
|
||||||
|
+ check_the_multis(openfile->current);
|
||||||
|
#endif
|
||||||
|
if (!refresh_needed && (shortcut->func == do_delete ||
|
||||||
|
shortcut->func == do_backspace))
|
||||||
|
diff --git a/src/prompt.c b/src/prompt.c
|
||||||
|
index e8fbbc0..8ec74fd 100644
|
||||||
|
--- a/src/prompt.c
|
||||||
|
+++ b/src/prompt.c
|
||||||
|
@@ -171,7 +171,7 @@ int do_statusbar_input(bool *finished)
|
||||||
|
/* Handle any other shortcut in the current menu, setting finished
|
||||||
|
* to TRUE to indicate that we're done after running or trying to
|
||||||
|
* run its associated function. */
|
||||||
|
- if (!ISSET(VIEW_MODE) || sctofunc(shortcut)->viewok)
|
||||||
|
+ if (!ISSET(VIEW_MODE) || okay_for_view(shortcut))
|
||||||
|
shortcut->func();
|
||||||
|
*finished = TRUE;
|
||||||
|
}
|
||||||
|
diff --git a/src/proto.h b/src/proto.h
|
||||||
|
index 86f53d7..5530a90 100644
|
||||||
|
--- a/src/proto.h
|
||||||
|
+++ b/src/proto.h
|
||||||
|
@@ -441,6 +441,7 @@ void disable_flow_control(void);
|
||||||
|
void enable_flow_control(void);
|
||||||
|
void terminal_init(void);
|
||||||
|
void unbound_key(int code);
|
||||||
|
+bool okay_for_view(const sc *shortcut);
|
||||||
|
int do_input(bool allow_funcs);
|
||||||
|
void do_output(char *output, size_t output_len, bool allow_cntrls);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.14.3
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
Summary: A small text editor
|
Summary: A small text editor
|
||||||
Name: nano
|
Name: nano
|
||||||
Version: 2.9.4
|
Version: 2.9.4
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
URL: https://www.nano-editor.org
|
URL: https://www.nano-editor.org
|
||||||
Source: https://www.nano-editor.org/dist/v2.9/%{name}-%{version}.tar.gz
|
Source: https://www.nano-editor.org/dist/v2.9/%{name}-%{version}.tar.gz
|
||||||
@ -19,6 +19,9 @@ Conflicts: filesystem < 3
|
|||||||
Requires(post): /sbin/install-info
|
Requires(post): /sbin/install-info
|
||||||
Requires(preun): /sbin/install-info
|
Requires(preun): /sbin/install-info
|
||||||
|
|
||||||
|
# fix crash of 'nano --restrict when <Insert> is pressed (#1558532)
|
||||||
|
Patch1: 0001-nano-2.9.4-restrict-crash.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
GNU nano is a small and friendly text editor.
|
GNU nano is a small and friendly text editor.
|
||||||
|
|
||||||
@ -80,6 +83,9 @@ exit 0
|
|||||||
%{_datadir}/nano
|
%{_datadir}/nano
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Mar 21 2018 Kamil Dudka <kdudka@redhat.com> - 2.9.4-2
|
||||||
|
- fix crash of 'nano --restrict when <Insert> is pressed (#1558532)
|
||||||
|
|
||||||
* Thu Mar 08 2018 Kamil Dudka <kdudka@redhat.com> - 2.9.4-1
|
* Thu Mar 08 2018 Kamil Dudka <kdudka@redhat.com> - 2.9.4-1
|
||||||
- new upstream release
|
- new upstream release
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user