summaryrefslogtreecommitdiff
path: root/system/ncurses/ncurses-6.3-20220226.patch
diff options
context:
space:
mode:
authorZach van Rijn <me@zv.io>2022-04-19 13:57:05 -0500
committerA. Wilcox <AWilcox@Wilcox-Tech.com>2022-05-01 17:05:57 -0500
commit51eb1b8fa89ca7c3837f48b842fb3150a24bd759 (patch)
tree74bafeb0f28e4ee63a84c148c4b54baa99aa2abc /system/ncurses/ncurses-6.3-20220226.patch
parente03bbd44e45aa58a8979703000b99228d45717d5 (diff)
downloadpackages-51eb1b8fa89ca7c3837f48b842fb3150a24bd759.tar.gz
packages-51eb1b8fa89ca7c3837f48b842fb3150a24bd759.tar.bz2
packages-51eb1b8fa89ca7c3837f48b842fb3150a24bd759.tar.xz
packages-51eb1b8fa89ca7c3837f48b842fb3150a24bd759.zip
system/ncurses: bump { 20220129 --> 20220416 }. add maintenance script. fixes #531.
Diffstat (limited to 'system/ncurses/ncurses-6.3-20220226.patch')
-rw-r--r--system/ncurses/ncurses-6.3-20220226.patch566
1 files changed, 566 insertions, 0 deletions
diff --git a/system/ncurses/ncurses-6.3-20220226.patch b/system/ncurses/ncurses-6.3-20220226.patch
new file mode 100644
index 000000000..2f0c9c0be
--- /dev/null
+++ b/system/ncurses/ncurses-6.3-20220226.patch
@@ -0,0 +1,566 @@
+# 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,