# ncurses 6.3 - patch 20220226 - Thomas E. Dickey
#
# ------------------------------------------------------------------------------
#
# Ncurses 6.3 is at
# ftp://ftp.invisible-island.net/ncurses/
# https://invisible-mirror.net/archives/ncurses/
# https://ftp.gnu.org/gnu/ncurses/
#
# Patches for ncurses 6.3 can be found at
# ftp://ftp.invisible-island.net/ncurses/6.3
# https://invisible-mirror.net/archives/ncurses/6.3
#
# ------------------------------------------------------------------------------
# ftp://ftp.invisible-island.net/ncurses/6.3/ncurses-6.3-20220226.patch.gz
# patch by Thomas E. Dickey <dickey@invisible-island.net>
# created Sun Feb 27 01:00:55 UTC 2022
# ------------------------------------------------------------------------------
# NEWS | 13 ++++++-
# VERSION | 2 -
# c++/cursslk.cc | 6 ++-
# dist.mk | 4 +-
# ncurses/tinfo/alloc_entry.c | 67 ++++++++++++++++++++-----------------
# ncurses/tinfo/write_entry.c | 6 +--
# package/debian-mingw/changelog | 4 +-
# package/debian-mingw64/changelog | 4 +-
# package/debian/changelog | 4 +-
# package/mingw-ncurses.nsi | 4 +-
# package/mingw-ncurses.spec | 2 -
# package/ncurses.spec | 2 -
# package/ncursest.spec | 2 -
# progs/infocmp.c | 20 ++++++-----
# progs/tabs.c | 8 ++--
# progs/tput.c | 14 +++++--
# test/ncurses.c | 8 +++-
# 17 files changed, 104 insertions(+), 66 deletions(-)
# ------------------------------------------------------------------------------
Index: NEWS
Prereq: 1.3780
--- ncurses-6.3-20220219+/NEWS 2022-02-20 00:40:32.000000000 +0000
+++ ncurses-6.3-20220226/NEWS 2022-02-26 23:50:53.000000000 +0000
@@ -26,7 +26,7 @@
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
-------------------------------------------------------------------------------
--- $Id: NEWS,v 1.3780 2022/02/20 00:40:32 tom Exp $
+-- $Id: NEWS,v 1.3782 2022/02/26 23:50:53 tom Exp $
-------------------------------------------------------------------------------
This is a log of changes that ncurses has gone through since Zeyd started
@@ -46,6 +46,17 @@
Changes through 1.9.9e did not credit all contributions;
it is not possible to add this information.
+20220226
+ + fix issues found with coverity:
+ + rewrite canonical_name() function of infocmp to ensure buffer size
+ + corrected use of original tty-modes in tput init/reset subcommands
+ + modify tabs program to limit tab-stop values to max-columns
+ + add limit-checks for palette rgb values in test/ncurses.c
+ + add a few null-pointer checks to help with static-analysis.
+ + enforce limit on number of soft-keys used in c++ binding.
+ + adjust a buffer-limit in write_entry.c to quiet a bogus warning from
+ gcc 12.0.1
+
20220219
+ expanded description in man/resizeterm.3x
+ additional workaround for ImageMagick in test/picsmap.c
Index: VERSION
--- ncurses-6.3-20220219+/VERSION 2022-02-19 12:13:47.000000000 +0000
+++ ncurses-6.3-20220226/VERSION 2022-02-26 12:23:15.000000000 +0000
@@ -1 +1 @@
-5:0:10 6.3 20220219
+5:0:10 6.3 20220226
Index: c++/cursslk.cc
Prereq: 1.19
--- ncurses-6.3-20220219+/c++/cursslk.cc 2020-07-18 19:57:11.000000000 +0000
+++ ncurses-6.3-20220226/c++/cursslk.cc 2022-02-26 17:57:23.000000000 +0000
@@ -1,6 +1,6 @@
// * this is for making emacs happy: -*-Mode: C++;-*-
/****************************************************************************
- * Copyright 2019,2020 Thomas E. Dickey *
+ * Copyright 2019-2020,2022 Thomas E. Dickey *
* Copyright 1998-2005,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
@@ -36,7 +36,7 @@
#include "cursslk.h"
#include "cursesapp.h"
-MODULE_ID("$Id: cursslk.cc,v 1.19 2020/07/18 19:57:11 anonymous.maarten Exp $")
+MODULE_ID("$Id: cursslk.cc,v 1.20 2022/02/26 17:57:23 tom Exp $")
Soft_Label_Key_Set::Soft_Label_Key&
Soft_Label_Key_Set::Soft_Label_Key::operator=(char *text)
@@ -56,6 +56,8 @@
void Soft_Label_Key_Set::init()
{
+ if (num_labels > 12)
+ num_labels = 12;
slk_array = new Soft_Label_Key[num_labels];
for(int i=0; i < num_labels; i++) {
slk_array[i].num = i+1;
Index: dist.mk
Prereq: 1.1467
--- ncurses-6.3-20220219+/dist.mk 2022-02-19 12:13:47.000000000 +0000
+++ ncurses-6.3-20220226/dist.mk 2022-02-26 12:23:15.000000000 +0000
@@ -26,7 +26,7 @@
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
-# $Id: dist.mk,v 1.1467 2022/02/19 12:13:47 tom Exp $
+# $Id: dist.mk,v 1.1468 2022/02/26 12:23:15 tom Exp $
# Makefile for creating ncurses distributions.
#
# This only needs to be used directly as a makefile by developers, but
@@ -38,7 +38,7 @@
# These define the major/minor/patch versions of ncurses.
NCURSES_MAJOR = 6
NCURSES_MINOR = 3
-NCURSES_PATCH = 20220219
+NCURSES_PATCH = 20220226
# We don't append the patch to the version, since this only applies to releases
VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR)
Index: ncurses/tinfo/alloc_entry.c
Prereq: 1.66
--- ncurses-6.3-20220219+/ncurses/tinfo/alloc_entry.c 2021-08-08 00:09:37.000000000 +0000
+++ ncurses-6.3-20220226/ncurses/tinfo/alloc_entry.c 2022-02-26 22:19:31.000000000 +0000
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright 2018-2020,2021 Thomas E. Dickey *
+ * Copyright 2018-2021,2022 Thomas E. Dickey *
* Copyright 1998-2013,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
@@ -48,7 +48,7 @@
#include <tic.h>
-MODULE_ID("$Id: alloc_entry.c,v 1.66 2021/08/08 00:09:37 tom Exp $")
+MODULE_ID("$Id: alloc_entry.c,v 1.68 2022/02/26 22:19:31 tom Exp $")
#define ABSENT_OFFSET -1
#define CANCELLED_OFFSET -2
@@ -62,16 +62,18 @@
_nc_init_entry(ENTRY * const tp)
/* initialize a terminal type data block */
{
+ if (tp == NULL) {
#if NO_LEAKS
- if (tp == 0) {
- if (stringbuf != 0) {
+ if (stringbuf != NULL) {
FreeAndNull(stringbuf);
}
return;
- }
+#else
+ _nc_err_abort("_nc_init_entry called without initialization");
#endif
+ }
- if (stringbuf == 0)
+ if (stringbuf == NULL)
TYPE_MALLOC(char, (size_t) MAX_STRTAB, stringbuf);
next_free = 0;
@@ -84,7 +86,7 @@
{
ENTRY *newp = typeCalloc(ENTRY, 1);
- if (newp != 0) {
+ if (newp != NULL) {
*newp = *oldp;
_nc_copy_termtype2(&(newp->tterm), &(oldp->tterm));
}
@@ -99,26 +101,28 @@
size_t old_next_free = next_free;
size_t len;
- if (!VALID_STRING(string))
- string = "";
- len = strlen(string) + 1;
-
- if (len == 1 && next_free != 0) {
- /*
- * Cheat a little by making an empty string point to the end of the
- * previous string.
- */
- if (next_free < MAX_STRTAB) {
- result = (stringbuf + next_free - 1);
+ if (stringbuf != NULL) {
+ if (!VALID_STRING(string))
+ string = "";
+ len = strlen(string) + 1;
+
+ if (len == 1 && next_free != 0) {
+ /*
+ * Cheat a little by making an empty string point to the end of the
+ * previous string.
+ */
+ if (next_free < MAX_STRTAB) {
+ result = (stringbuf + next_free - 1);
+ }
+ } else if (next_free + len < MAX_STRTAB) {
+ _nc_STRCPY(&stringbuf[next_free], string, MAX_STRTAB);
+ DEBUG(7, ("Saved string %s", _nc_visbuf(string)));
+ DEBUG(7, ("at location %d", (int) next_free));
+ next_free += len;
+ result = (stringbuf + old_next_free);
+ } else {
+ _nc_warning("Too much data, some is lost: %s", string);
}
- } else if (next_free + len < MAX_STRTAB) {
- _nc_STRCPY(&stringbuf[next_free], string, MAX_STRTAB);
- DEBUG(7, ("Saved string %s", _nc_visbuf(string)));
- DEBUG(7, ("at location %d", (int) next_free));
- next_free += len;
- result = (stringbuf + old_next_free);
- } else {
- _nc_warning("Too much data, some is lost: %s", string);
}
return result;
}
@@ -130,9 +134,14 @@
int offsets[MAX_ENTRY_SIZE / sizeof(short)];
int useoffsets[MAX_USES];
unsigned i, n;
- unsigned nuses = ep->nuses;
- TERMTYPE2 *tp = &(ep->tterm);
+ unsigned nuses;
+ TERMTYPE2 *tp;
+
+ if (ep == NULL || stringbuf == NULL)
+ _nc_err_abort("_nc_wrap_entry called without initialization");
+ nuses = ep->nuses;
+ tp = &(ep->tterm);
if (copy_strings) {
next_free = 0; /* clear static storage */
@@ -294,7 +303,7 @@
NCURSES_EXPORT(void)
_nc_alloc_entry_leaks(void)
{
- if (stringbuf != 0) {
+ if (stringbuf != NULL) {
FreeAndNull(stringbuf);
}
next_free = 0;
Index: ncurses/tinfo/write_entry.c
Prereq: 1.118
--- ncurses-6.3-20220219+/ncurses/tinfo/write_entry.c 2021-08-15 20:07:11.000000000 +0000
+++ ncurses-6.3-20220226/ncurses/tinfo/write_entry.c 2022-02-26 20:59:58.000000000 +0000
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright 2018-2020,2021 Thomas E. Dickey *
+ * Copyright 2018-2021,2022 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
@@ -51,7 +51,7 @@
#define TRACE_NUM(n) /* nothing */
#endif
-MODULE_ID("$Id: write_entry.c,v 1.118 2021/08/15 20:07:11 tom Exp $")
+MODULE_ID("$Id: write_entry.c,v 1.119 2022/02/26 20:59:58 tom Exp $")
static int total_written;
static int total_parts;
@@ -145,7 +145,7 @@
rc = 0;
}
} else {
- if (strlen(top) + strlen(src) + 2 <= limit) {
+ if ((strlen(top) + strlen(src) + 6) <= limit) {
_nc_SPRINTF(dst, _nc_SLIMIT(limit) "%s/%s", top, src);
rc = 0;
}
Index: package/debian-mingw/changelog
--- ncurses-6.3-20220219+/package/debian-mingw/changelog 2022-02-19 12:13:47.000000000 +0000
+++ ncurses-6.3-20220226/package/debian-mingw/changelog 2022-02-26 12:23:15.000000000 +0000
@@ -1,8 +1,8 @@
-ncurses6 (6.3+20220219) unstable; urgency=low
+ncurses6 (6.3+20220226) unstable; urgency=low
* latest weekly patch
- -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 19 Feb 2022 07:13:47 -0500
+ -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 26 Feb 2022 07:23:15 -0500
ncurses6 (5.9-20131005) unstable; urgency=low
Index: package/debian-mingw64/changelog
--- ncurses-6.3-20220219+/package/debian-mingw64/changelog 2022-02-19 12:13:47.000000000 +0000
+++ ncurses-6.3-20220226/package/debian-mingw64/changelog 2022-02-26 12:23:15.000000000 +0000
@@ -1,8 +1,8 @@
-ncurses6 (6.3+20220219) unstable; urgency=low
+ncurses6 (6.3+20220226) unstable; urgency=low
* latest weekly patch
- -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 19 Feb 2022 07:13:47 -0500
+ -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 26 Feb 2022 07:23:15 -0500
ncurses6 (5.9-20131005) unstable; urgency=low
Index: package/debian/changelog
--- ncurses-6.3-20220219+/package/debian/changelog 2022-02-19 12:13:47.000000000 +0000
+++ ncurses-6.3-20220226/package/debian/changelog 2022-02-26 12:23:15.000000000 +0000
@@ -1,8 +1,8 @@
-ncurses6 (6.3+20220219) unstable; urgency=low
+ncurses6 (6.3+20220226) unstable; urgency=low
* latest weekly patch
- -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 19 Feb 2022 07:13:47 -0500
+ -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 26 Feb 2022 07:23:15 -0500
ncurses6 (5.9-20120608) unstable; urgency=low
Index: package/mingw-ncurses.nsi
Prereq: 1.507
--- ncurses-6.3-20220219+/package/mingw-ncurses.nsi 2022-02-19 12:13:47.000000000 +0000
+++ ncurses-6.3-20220226/package/mingw-ncurses.nsi 2022-02-26 12:23:15.000000000 +0000
@@ -1,4 +1,4 @@
-; $Id: mingw-ncurses.nsi,v 1.507 2022/02/19 12:13:47 tom Exp $
+; $Id: mingw-ncurses.nsi,v 1.508 2022/02/26 12:23:15 tom Exp $
; TODO add examples
; TODO bump ABI to 6
@@ -10,7 +10,7 @@
!define VERSION_MAJOR "6"
!define VERSION_MINOR "3"
!define VERSION_YYYY "2022"
-!define VERSION_MMDD "0219"
+!define VERSION_MMDD "0226"
!define VERSION_PATCH ${VERSION_YYYY}${VERSION_MMDD}
!define MY_ABI "5"
Index: package/mingw-ncurses.spec
--- ncurses-6.3-20220219+/package/mingw-ncurses.spec 2022-02-19 12:13:47.000000000 +0000
+++ ncurses-6.3-20220226/package/mingw-ncurses.spec 2022-02-26 12:23:15.000000000 +0000
@@ -3,7 +3,7 @@
Summary: shared libraries for terminal handling
Name: mingw32-ncurses6
Version: 6.3
-Release: 20220219
+Release: 20220226
License: X11
Group: Development/Libraries
Source: ncurses-%{version}-%{release}.tgz
Index: package/ncurses.spec
--- ncurses-6.3-20220219+/package/ncurses.spec 2022-02-19 12:13:47.000000000 +0000
+++ ncurses-6.3-20220226/package/ncurses.spec 2022-02-26 12:23:15.000000000 +0000
@@ -1,7 +1,7 @@
Summary: shared libraries for terminal handling
Name: ncurses6
Version: 6.3
-Release: 20220219
+Release: 20220226
License: X11
Group: Development/Libraries
Source: ncurses-%{version}-%{release}.tgz
Index: package/ncursest.spec
--- ncurses-6.3-20220219+/package/ncursest.spec 2022-02-19 12:13:47.000000000 +0000
+++ ncurses-6.3-20220226/package/ncursest.spec 2022-02-26 12:23:15.000000000 +0000
@@ -1,7 +1,7 @@
Summary: Curses library with POSIX thread support.
Name: ncursest6
Version: 6.3
-Release: 20220219
+Release: 20220226
License: X11
Group: Development/Libraries
Source: ncurses-%{version}-%{release}.tgz
Index: progs/infocmp.c
Prereq: 1.151
--- ncurses-6.3-20220219+/progs/infocmp.c 2021-06-17 21:11:08.000000000 +0000
+++ ncurses-6.3-20220226/progs/infocmp.c 2022-02-26 23:25:55.000000000 +0000
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright 2020,2021 Thomas E. Dickey *
+ * Copyright 2020-2021,2022 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
@@ -43,7 +43,7 @@
#include <dump_entry.h>
-MODULE_ID("$Id: infocmp.c,v 1.151 2021/06/17 21:11:08 tom Exp $")
+MODULE_ID("$Id: infocmp.c,v 1.152 2022/02/26 23:25:55 tom Exp $")
#define MAX_STRING 1024 /* maximum formatted string */
@@ -125,16 +125,20 @@
}
static char *
-canonical_name(char *ptr, char *buf)
+canonical_name(char *source, char *target)
/* extract the terminal type's primary name */
{
- char *bp;
+ int limit = NAMESIZE;
- _nc_STRCPY(buf, ptr, NAMESIZE);
- if ((bp = strchr(buf, '|')) != 0)
- *bp = '\0';
+ while (--limit > 0) {
+ char ch = *source++;
+ if (ch == '|')
+ break;
+ *target++ = ch;
+ }
+ *target = '\0';
- return (buf);
+ return (target);
}
static bool
Index: progs/tabs.c
Prereq: 1.50
--- ncurses-6.3-20220219+/progs/tabs.c 2021-10-10 00:54:41.000000000 +0000
+++ ncurses-6.3-20220226/progs/tabs.c 2022-02-26 22:44:44.000000000 +0000
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright 2020,2021 Thomas E. Dickey *
+ * Copyright 2020-2021,2022 Thomas E. Dickey *
* Copyright 2008-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
@@ -39,7 +39,7 @@
#include <progs.priv.h>
#include <tty_settings.h>
-MODULE_ID("$Id: tabs.c,v 1.50 2021/10/10 00:54:41 tom Exp $")
+MODULE_ID("$Id: tabs.c,v 1.51 2022/02/26 22:44:44 tom Exp $")
static GCC_NORETURN void usage(void);
@@ -128,7 +128,7 @@
int prior = 0;
int ch;
- if (result == 0)
+ if (result == NULL)
failed("decode_tabs");
if (margin < 0)
@@ -138,6 +138,8 @@
if (isdigit(UChar(ch))) {
value *= 10;
value += (ch - '0');
+ if (value > max_cols)
+ value = max_cols;
} else if (ch == ',') {
result[n] = value + prior + margin;
if (n > 0 && result[n] <= result[n - 1]) {
Index: progs/tput.c
Prereq: 1.97
--- ncurses-6.3-20220219+/progs/tput.c 2021-10-02 18:09:23.000000000 +0000
+++ ncurses-6.3-20220226/progs/tput.c 2022-02-26 23:19:31.000000000 +0000
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright 2018-2020,2021 Thomas E. Dickey *
+ * Copyright 2018-2021,2022 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
@@ -47,7 +47,7 @@
#include <transform.h>
#include <tty_settings.h>
-MODULE_ID("$Id: tput.c,v 1.97 2021/10/02 18:09:23 tom Exp $")
+MODULE_ID("$Id: tput.c,v 1.99 2022/02/26 23:19:31 tom Exp $")
#define PUTS(s) fputs(s, stdout)
@@ -160,7 +160,7 @@
name = check_aliases(argv[0], FALSE);
*used = 1;
if (is_reset || is_init) {
- TTY oldmode;
+ TTY oldmode = *settings;
int terasechar = -1; /* new erase character */
int intrchar = -1; /* new interrupt character */
@@ -180,6 +180,7 @@
#endif
set_control_chars(settings, terasechar, intrchar, tkillchar);
set_conversions(settings);
+
if (send_init_strings(fd, &oldmode)) {
reset_flush();
}
@@ -336,6 +337,7 @@
int result = 0;
int fd;
int used;
+ TTY old_settings;
TTY tty_settings;
bool opt_x = FALSE; /* clear scrollback if possible */
bool is_alias;
@@ -391,6 +393,7 @@
quit(ErrUsage, "No value for $TERM and no -T specified");
fd = save_tty_settings(&tty_settings, need_tty);
+ old_settings = tty_settings;
if (setupterm(term, fd, &errret) != OK && errret <= 0)
quit(ErrTermType, "unknown terminal \"%s\"", term);
@@ -400,6 +403,7 @@
if ((argc <= 0) && !is_alias)
usage(NULL);
while (argc > 0) {
+ tty_settings = old_settings;
code = tput_cmd(fd, &tty_settings, opt_x, argc, argv, &used);
if (code != 0)
break;
@@ -433,7 +437,9 @@
argnow = argvec;
while (argnum > 0) {
- int code = tput_cmd(fd, &tty_settings, opt_x, argnum, argnow, &used);
+ int code;
+ tty_settings = old_settings;
+ code = tput_cmd(fd, &tty_settings, opt_x, argnum, argnow, &used);
if (code != 0) {
if (result == 0)
result = ErrSystem(0); /* will return value >4 */
Index: test/ncurses.c
Prereq: 1.527
--- ncurses-6.3-20220219+/test/ncurses.c 2021-09-04 10:31:03.000000000 +0000
+++ ncurses-6.3-20220226/test/ncurses.c 2022-02-26 22:41:02.000000000 +0000
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright 2018-2020,2021 Thomas E. Dickey *
+ * Copyright 2018-2021,2022 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
@@ -41,7 +41,7 @@
Author: Eric S. Raymond <esr@snark.thyrsus.com> 1993
Thomas E. Dickey (beginning revision 1.27 in 1996).
-$Id: ncurses.c,v 1.527 2021/09/04 10:31:03 tom Exp $
+$Id: ncurses.c,v 1.528 2022/02/26 22:41:02 tom Exp $
***************************************************************************/
@@ -2885,6 +2885,10 @@
while (fgets(buffer, sizeof(buffer), fp) != 0) {
if (sscanf(buffer, "scale:%d", &c) == 1) {
scale = c;
+ if (scale < 100)
+ scale = 100;
+ if (scale > 1000)
+ scale = 1000;
} else if (sscanf(buffer, "%d:%d %d %d",
&c,
&red,