gnu: ncurses: Update to 6.0-20170930.
* gnu/packages/ncurses.scm (ncurses): Update to 6.0-20170930. [source](patches): Remove. [source](uri): Adjust to version suffix. [arguments]: Add 'apply-rollup-patch' phase. [native-inputs]: Add a "rollup-patch" origin. * gnu/packages/patches/ncurses-CVE-2017-10684-10685.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove it.
This commit is contained in:
parent
ef56fdc18d
commit
667082d591
|
@ -879,7 +879,6 @@ dist_patch_DATA = \
|
||||||
%D%/packages/patches/mupdf-CVE-2017-15587.patch \
|
%D%/packages/patches/mupdf-CVE-2017-15587.patch \
|
||||||
%D%/packages/patches/mupen64plus-ui-console-notice.patch \
|
%D%/packages/patches/mupen64plus-ui-console-notice.patch \
|
||||||
%D%/packages/patches/mutt-store-references.patch \
|
%D%/packages/patches/mutt-store-references.patch \
|
||||||
%D%/packages/patches/ncurses-CVE-2017-10684-10685.patch \
|
|
||||||
%D%/packages/patches/net-tools-bitrot.patch \
|
%D%/packages/patches/net-tools-bitrot.patch \
|
||||||
%D%/packages/patches/netcdf-date-time.patch \
|
%D%/packages/patches/netcdf-date-time.patch \
|
||||||
%D%/packages/patches/netcdf-tst_h_par.patch \
|
%D%/packages/patches/netcdf-tst_h_par.patch \
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
|
;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
|
||||||
;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
|
;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
|
||||||
;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
|
;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
|
||||||
|
;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -38,12 +39,12 @@
|
||||||
(define-public ncurses
|
(define-public ncurses
|
||||||
(package
|
(package
|
||||||
(name "ncurses")
|
(name "ncurses")
|
||||||
(version "6.0")
|
(version "6.0-20170930")
|
||||||
(source (origin
|
(source (origin
|
||||||
(method url-fetch)
|
(method url-fetch)
|
||||||
(uri (string-append "mirror://gnu/ncurses/ncurses-"
|
(uri (string-append "mirror://gnu/ncurses/ncurses-"
|
||||||
version ".tar.gz"))
|
(car (string-split version #\-))
|
||||||
(patches (search-patches "ncurses-CVE-2017-10684-10685.patch"))
|
".tar.gz"))
|
||||||
(sha256
|
(sha256
|
||||||
(base32
|
(base32
|
||||||
"0q3jck7lna77z5r42f13c4xglc7azd19pxfrjrpgp2yf615w4lgm"))))
|
"0q3jck7lna77z5r42f13c4xglc7azd19pxfrjrpgp2yf615w4lgm"))))
|
||||||
|
@ -71,6 +72,12 @@
|
||||||
(cons (string-append "--host=" target)
|
(cons (string-append "--host=" target)
|
||||||
configure-flags)
|
configure-flags)
|
||||||
configure-flags))))))
|
configure-flags))))))
|
||||||
|
(apply-rollup-patch-phase
|
||||||
|
'(lambda* (#:key inputs #:allow-other-keys)
|
||||||
|
(copy-file (assoc-ref inputs "rollup-patch")
|
||||||
|
(string-append (getcwd) "/rollup-patch.sh.bz2"))
|
||||||
|
(and (zero? (system* "bzip2" "-d" "rollup-patch.sh.bz2"))
|
||||||
|
(zero? (system* "sh" "rollup-patch.sh")))))
|
||||||
(remove-shebang-phase
|
(remove-shebang-phase
|
||||||
'(lambda _
|
'(lambda _
|
||||||
;; To avoid retaining a reference to the bootstrap Bash via the
|
;; To avoid retaining a reference to the bootstrap Bash via the
|
||||||
|
@ -166,6 +173,8 @@
|
||||||
,@(if (target-mingw?) '("--enable-term-driver") '()))))
|
,@(if (target-mingw?) '("--enable-term-driver") '()))))
|
||||||
#:tests? #f ; no "check" target
|
#:tests? #f ; no "check" target
|
||||||
#:phases (modify-phases %standard-phases
|
#:phases (modify-phases %standard-phases
|
||||||
|
(add-after 'unpack 'apply-rollup-patch
|
||||||
|
,apply-rollup-patch-phase)
|
||||||
(replace 'configure ,configure-phase)
|
(replace 'configure ,configure-phase)
|
||||||
(add-after 'install 'post-install
|
(add-after 'install 'post-install
|
||||||
,post-install-phase)
|
,post-install-phase)
|
||||||
|
@ -175,7 +184,22 @@
|
||||||
,remove-shebang-phase)))))
|
,remove-shebang-phase)))))
|
||||||
(self-native-input? #t) ; for `tic'
|
(self-native-input? #t) ; for `tic'
|
||||||
(native-inputs
|
(native-inputs
|
||||||
`(("pkg-config" ,pkg-config)))
|
`(("pkg-config" ,pkg-config)
|
||||||
|
|
||||||
|
;; Ncurses distributes "stable" patchsets to be applied on top
|
||||||
|
;; of the release tarball. These are only available as shell
|
||||||
|
;; scripts(!) so we decompress and apply them in a phase.
|
||||||
|
;; See <https://invisible-mirror.net/archives/ncurses/6.0/README>.
|
||||||
|
("rollup-patch"
|
||||||
|
,(origin
|
||||||
|
(method url-fetch)
|
||||||
|
(uri (string-append
|
||||||
|
"https://invisible-mirror.net/archives/ncurses/"
|
||||||
|
(car (string-split version #\-))
|
||||||
|
"/ncurses-" version "-patch.sh.bz2"))
|
||||||
|
(sha256
|
||||||
|
(base32
|
||||||
|
"08a1pp8wnj1fwpa1pz3fgrmd6xwp21idniswqz8lx3w3z2nb4ydi"))))))
|
||||||
(native-search-paths
|
(native-search-paths
|
||||||
(list (search-path-specification
|
(list (search-path-specification
|
||||||
(variable "TERMINFO_DIRS")
|
(variable "TERMINFO_DIRS")
|
||||||
|
|
|
@ -1,200 +0,0 @@
|
||||||
Fix CVE-2017-10684 and CVE-2017-10685:
|
|
||||||
|
|
||||||
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-10684
|
|
||||||
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-10685
|
|
||||||
|
|
||||||
Bug reports included proof of concept reproducer inputs:
|
|
||||||
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=1464684
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=1464685
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=1464686
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=1464687
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=1464688
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=1464691
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=1464692
|
|
||||||
|
|
||||||
Patches copied from ncurses patch release 20170701:
|
|
||||||
|
|
||||||
ftp://invisible-island.net/ncurses/6.0/ncurses-6.0-20170701.patch.gz
|
|
||||||
|
|
||||||
Excerpt from patch release announcement:
|
|
||||||
|
|
||||||
+ add/improve checks in tic's parser to address invalid input
|
|
||||||
(Redhat #1464684, #1464685, #1464686, #1464691).
|
|
||||||
+ alloc_entry.c, add a check for a null-pointer.
|
|
||||||
+ parse_entry.c, add several checks for valid pointers as well as
|
|
||||||
one check to ensure that a single character on a line is not
|
|
||||||
treated as the 2-character termcap short-name.
|
|
||||||
+ the fixes for Redhat #1464685 obscured a problem subsequently
|
|
||||||
reported in Redhat #1464687; the given test-case was no longer
|
|
||||||
reproducible. Testing without the fixes for the earlier reports
|
|
||||||
showed a problem with buffer overflow in dump_entry.c, which is
|
|
||||||
addressed by reducing the use of a fixed-size buffer.
|
|
||||||
|
|
||||||
https://lists.gnu.org/archive/html/bug-ncurses/2017-07/msg00001.html
|
|
||||||
|
|
||||||
--- ncurses-6.0-20170624+/ncurses/tinfo/alloc_entry.c 2017-04-09 23:33:51.000000000 +0000
|
|
||||||
+++ ncurses-6.0-20170701/ncurses/tinfo/alloc_entry.c 2017-06-27 23:48:55.000000000 +0000
|
|
||||||
@@ -96,7 +96,11 @@
|
|
||||||
{
|
|
||||||
char *result = 0;
|
|
||||||
size_t old_next_free = next_free;
|
|
||||||
- size_t len = strlen(string) + 1;
|
|
||||||
+ size_t len;
|
|
||||||
+
|
|
||||||
+ if (string == 0)
|
|
||||||
+ return _nc_save_str("");
|
|
||||||
+ len = strlen(string) + 1;
|
|
||||||
|
|
||||||
if (len == 1 && next_free != 0) {
|
|
||||||
/*
|
|
||||||
--- ncurses-6.0-20170624+/ncurses/tinfo/parse_entry.c 2017-06-24 22:59:46.000000000 +0000
|
|
||||||
+++ ncurses-6.0-20170701/ncurses/tinfo/parse_entry.c 2017-06-28 00:53:12.000000000 +0000
|
|
||||||
@@ -236,13 +236,14 @@
|
|
||||||
* implemented it. Note that the resulting terminal type was never the
|
|
||||||
* 2-character name, but was instead the first alias after that.
|
|
||||||
*/
|
|
||||||
+#define ok_TC2(s) (isgraph(UChar(s)) && (s) != '|')
|
|
||||||
ptr = _nc_curr_token.tk_name;
|
|
||||||
if (_nc_syntax == SYN_TERMCAP
|
|
||||||
#if NCURSES_XNAMES
|
|
||||||
&& !_nc_user_definable
|
|
||||||
#endif
|
|
||||||
) {
|
|
||||||
- if (ptr[2] == '|') {
|
|
||||||
+ if (ok_TC2(ptr[0]) && ok_TC2(ptr[1]) && (ptr[2] == '|')) {
|
|
||||||
ptr += 3;
|
|
||||||
_nc_curr_token.tk_name[2] = '\0';
|
|
||||||
}
|
|
||||||
@@ -284,9 +285,11 @@
|
|
||||||
if (is_use || is_tc) {
|
|
||||||
entryp->uses[entryp->nuses].name = _nc_save_str(_nc_curr_token.tk_valstring);
|
|
||||||
entryp->uses[entryp->nuses].line = _nc_curr_line;
|
|
||||||
- entryp->nuses++;
|
|
||||||
- if (entryp->nuses > 1 && is_tc) {
|
|
||||||
- BAD_TC_USAGE
|
|
||||||
+ if (VALID_STRING(entryp->uses[entryp->nuses].name)) {
|
|
||||||
+ entryp->nuses++;
|
|
||||||
+ if (entryp->nuses > 1 && is_tc) {
|
|
||||||
+ BAD_TC_USAGE
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* normal token lookup */
|
|
||||||
@@ -588,7 +591,7 @@
|
|
||||||
static void
|
|
||||||
append_acs(string_desc * dst, int code, char *src)
|
|
||||||
{
|
|
||||||
- if (src != 0 && strlen(src) == 1) {
|
|
||||||
+ if (VALID_STRING(src) && strlen(src) == 1) {
|
|
||||||
append_acs0(dst, code, *src);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -849,15 +852,14 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tp->Strings[to_ptr->nte_index]) {
|
|
||||||
+ const char *s = tp->Strings[from_ptr->nte_index];
|
|
||||||
+ const char *t = tp->Strings[to_ptr->nte_index];
|
|
||||||
/* There's no point in warning about it if it's the same
|
|
||||||
* string; that's just an inefficiency.
|
|
||||||
*/
|
|
||||||
- if (strcmp(
|
|
||||||
- tp->Strings[from_ptr->nte_index],
|
|
||||||
- tp->Strings[to_ptr->nte_index]) != 0)
|
|
||||||
+ if (VALID_STRING(s) && VALID_STRING(t) && strcmp(s, t) != 0)
|
|
||||||
_nc_warning("%s (%s) already has an explicit value %s, ignoring ko",
|
|
||||||
- ap->to, ap->from,
|
|
||||||
- _nc_visbuf(tp->Strings[to_ptr->nte_index]));
|
|
||||||
+ ap->to, ap->from, t);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
--- ncurses-6.0-20170624+/progs/dump_entry.c 2017-06-23 22:47:43.000000000 +0000
|
|
||||||
+++ ncurses-6.0-20170701/progs/dump_entry.c 2017-07-01 11:27:29.000000000 +0000
|
|
||||||
@@ -841,9 +841,10 @@
|
|
||||||
PredIdx num_strings = 0;
|
|
||||||
bool outcount = 0;
|
|
||||||
|
|
||||||
-#define WRAP_CONCAT \
|
|
||||||
- wrap_concat(buffer); \
|
|
||||||
- outcount = TRUE
|
|
||||||
+#define WRAP_CONCAT1(s) wrap_concat(s); outcount = TRUE
|
|
||||||
+#define WRAP_CONCAT2(a,b) wrap_concat(a); WRAP_CONCAT1(b)
|
|
||||||
+#define WRAP_CONCAT3(a,b,c) wrap_concat(a); WRAP_CONCAT2(b,c)
|
|
||||||
+#define WRAP_CONCAT WRAP_CONCAT1(buffer)
|
|
||||||
|
|
||||||
len = 12; /* terminfo file-header */
|
|
||||||
|
|
||||||
@@ -1007,9 +1008,9 @@
|
|
||||||
set_attributes = save_sgr;
|
|
||||||
|
|
||||||
trimmed_sgr0 = _nc_trim_sgr0(tterm);
|
|
||||||
- if (strcmp(capability, trimmed_sgr0))
|
|
||||||
+ if (strcmp(capability, trimmed_sgr0)) {
|
|
||||||
capability = trimmed_sgr0;
|
|
||||||
- else {
|
|
||||||
+ } else {
|
|
||||||
if (trimmed_sgr0 != exit_attribute_mode)
|
|
||||||
free(trimmed_sgr0);
|
|
||||||
}
|
|
||||||
@@ -1046,13 +1047,21 @@
|
|
||||||
_nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer))
|
|
||||||
"%s=!!! %s WILL NOT CONVERT !!!",
|
|
||||||
name, srccap);
|
|
||||||
+ WRAP_CONCAT;
|
|
||||||
} else if (suppress_untranslatable) {
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
char *s = srccap, *d = buffer;
|
|
||||||
- _nc_SPRINTF(d, _nc_SLIMIT(sizeof(buffer)) "..%s=", name);
|
|
||||||
- d += strlen(d);
|
|
||||||
+ WRAP_CONCAT3("..", name, "=");
|
|
||||||
while ((*d = *s++) != 0) {
|
|
||||||
+ if ((d - buffer - 1) >= (int) sizeof(buffer)) {
|
|
||||||
+ fprintf(stderr,
|
|
||||||
+ "%s: value for %s is too long\n",
|
|
||||||
+ _nc_progname,
|
|
||||||
+ name);
|
|
||||||
+ *d = '\0';
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
if (*d == ':') {
|
|
||||||
*d++ = '\\';
|
|
||||||
*d = ':';
|
|
||||||
@@ -1061,13 +1070,12 @@
|
|
||||||
}
|
|
||||||
d++;
|
|
||||||
}
|
|
||||||
+ WRAP_CONCAT;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
- _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer))
|
|
||||||
- "%s=%s", name, cv);
|
|
||||||
+ WRAP_CONCAT3(name, "=", cv);
|
|
||||||
}
|
|
||||||
len += (int) strlen(capability) + 1;
|
|
||||||
- WRAP_CONCAT;
|
|
||||||
} else {
|
|
||||||
char *src = _nc_tic_expand(capability,
|
|
||||||
outform == F_TERMINFO, numbers);
|
|
||||||
@@ -1083,8 +1091,7 @@
|
|
||||||
strcpy_DYN(&tmpbuf, src);
|
|
||||||
}
|
|
||||||
len += (int) strlen(capability) + 1;
|
|
||||||
- wrap_concat(tmpbuf.text);
|
|
||||||
- outcount = TRUE;
|
|
||||||
+ WRAP_CONCAT1(tmpbuf.text);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* e.g., trimmed_sgr0 */
|
|
||||||
@@ -1526,7 +1533,8 @@
|
|
||||||
}
|
|
||||||
if (len > critlen) {
|
|
||||||
(void) fprintf(stderr,
|
|
||||||
- "warning: %s entry is %d bytes long\n",
|
|
||||||
+ "%s: %s entry is %d bytes long\n",
|
|
||||||
+ _nc_progname,
|
|
||||||
_nc_first_name(tterm->term_names),
|
|
||||||
len);
|
|
||||||
SHOW_WHY("# WARNING: this entry, %d bytes long, may core-dump %s libraries!\n",
|
|
Loading…
Reference in New Issue