From 1bebe34b567c8f3392578c002b1b6a2504135497 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Wed, 23 Dec 2015 14:05:47 +0000 Subject: [PATCH] Preventing valid pointers from getting truncated and rejected. Patch by Mike Frysinger, tweaked by Benno. git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5508 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 3 +++ src/nano.c | 11 +++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index f96380bf..d006b8c5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,9 @@ * src/files.c (save_history, save_poshistory): Don't make the user hit Enter when there's an error saving history state at exit; it is pointless and annoying. Just notify the user and move on. + * src/nano.c (main): On most 64-bit systems, casting a pointer to + an integer can cause valid pointers to be truncated and rejected. + Rework the code to test for the two invalid values directly. 2015-12-23 Christian Weisgerber * configure.ac: AC_CHECK_HEADERS_ONCE() is very special and cannot be diff --git a/src/nano.c b/src/nano.c index 1af88dc9..0780ebcd 100644 --- a/src/nano.c +++ b/src/nano.c @@ -2574,11 +2574,14 @@ int main(int argc, char **argv) #endif #if !defined(NANO_TINY) && defined(HAVE_KEY_DEFINED) + const char *keyvalue; /* Ask ncurses for the key codes for Control+Left and Control+Right. */ - if ((int)tigetstr("kLFT5") > 0) - controlleft = key_defined(tigetstr("kLFT5")); - if ((int)tigetstr("kRIT5") > 0) - controlright = key_defined(tigetstr("kRIT5")); + keyvalue = tigetstr("kLFT5"); + if (keyvalue != 0 && keyvalue != (char *)-1) + controlleft = key_defined(keyvalue); + keyvalue = tigetstr("kRIT5"); + if (keyvalue != 0 && keyvalue != (char *)-1) + controlright = key_defined(keyvalue); #endif #ifdef DEBUG -- 2.39.5