diff options
| author | Peter Marko <peter.marko@siemens.com> | 2024-05-18 23:29:54 +0200 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2024-05-22 10:21:26 +0100 |
| commit | 95e812313fdbac17cf60f1a6467b4f1b34fb687d (patch) | |
| tree | a61183831414ac0c6dfa28bf1b6bd28303008113 | |
| parent | d803a25c823f266f0e9d2c982b5c25c50ade3b85 (diff) | |
| download | poky-95e812313fdbac17cf60f1a6467b4f1b34fb687d.tar.gz | |
ncurses: Upgrade 6.4 -> 6.5
Removed 4 backported patched included in this release.
Updated patches by devtool.
License-Update: copyright years refreshed
(From OE-Core rev: e9962f7033f717591a168e694311523c82c67608)
Signed-off-by: Peter Marko <peter.marko@siemens.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | meta/recipes-core/ncurses/files/0001-Fix-CVE-2023-29491.patch | 462 | ||||
| -rw-r--r-- | meta/recipes-core/ncurses/files/0001-Updating-reset-code-ncurses-6.4-patch-20231104.patch | 499 | ||||
| -rw-r--r-- | meta/recipes-core/ncurses/files/0001-tic-hang.patch | 11 | ||||
| -rw-r--r-- | meta/recipes-core/ncurses/files/0002-configure-reproducible.patch | 7 | ||||
| -rw-r--r-- | meta/recipes-core/ncurses/files/0003-gen-pkgconfig.in-Do-not-include-LDFLAGS-in-generated.patch | 5 | ||||
| -rw-r--r-- | meta/recipes-core/ncurses/files/CVE-2023-45918.patch | 180 | ||||
| -rw-r--r-- | meta/recipes-core/ncurses/files/CVE-2023-50495.patch | 301 | ||||
| -rw-r--r-- | meta/recipes-core/ncurses/files/exit_prototype.patch | 11 | ||||
| -rw-r--r-- | meta/recipes-core/ncurses/ncurses.inc | 2 | ||||
| -rw-r--r-- | meta/recipes-core/ncurses/ncurses_6.5.bb (renamed from meta/recipes-core/ncurses/ncurses_6.4.bb) | 6 |
10 files changed, 16 insertions, 1468 deletions
diff --git a/meta/recipes-core/ncurses/files/0001-Fix-CVE-2023-29491.patch b/meta/recipes-core/ncurses/files/0001-Fix-CVE-2023-29491.patch deleted file mode 100644 index 1232c8c2a8..0000000000 --- a/meta/recipes-core/ncurses/files/0001-Fix-CVE-2023-29491.patch +++ /dev/null | |||
| @@ -1,462 +0,0 @@ | |||
| 1 | From 3d54a41f12e9aa059f06e66e72d872f2283395b6 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Chen Qi <Qi.Chen@windriver.com> | ||
| 3 | Date: Sun, 30 Jul 2023 21:14:00 -0700 | ||
| 4 | Subject: [PATCH] Fix CVE-2023-29491 | ||
| 5 | |||
| 6 | CVE: CVE-2023-29491 | ||
| 7 | |||
| 8 | Upstream-Status: Backport [http://ncurses.scripts.mit.edu/?p=ncurses.git;a=commitdiff;h=eb51b1ea1f75a0ec17c9c5937cb28df1e8eeec56] | ||
| 9 | |||
| 10 | Signed-off-by: Chen Qi <Qi.Chen@windriver.com> | ||
| 11 | --- | ||
| 12 | ncurses/tinfo/lib_tgoto.c | 10 +++- | ||
| 13 | ncurses/tinfo/lib_tparm.c | 116 ++++++++++++++++++++++++++++++++----- | ||
| 14 | ncurses/tinfo/read_entry.c | 3 + | ||
| 15 | progs/tic.c | 6 ++ | ||
| 16 | progs/tparm_type.c | 9 +++ | ||
| 17 | progs/tparm_type.h | 2 + | ||
| 18 | progs/tput.c | 61 ++++++++++++++++--- | ||
| 19 | 7 files changed, 185 insertions(+), 22 deletions(-) | ||
| 20 | |||
| 21 | diff --git a/ncurses/tinfo/lib_tgoto.c b/ncurses/tinfo/lib_tgoto.c | ||
| 22 | index 9cf5e100..c50ed4df 100644 | ||
| 23 | --- a/ncurses/tinfo/lib_tgoto.c | ||
| 24 | +++ b/ncurses/tinfo/lib_tgoto.c | ||
| 25 | @@ -207,6 +207,14 @@ tgoto(const char *string, int x, int y) | ||
| 26 | result = tgoto_internal(string, x, y); | ||
| 27 | else | ||
| 28 | #endif | ||
| 29 | - result = TIPARM_2(string, y, x); | ||
| 30 | + if ((result = TIPARM_2(string, y, x)) == NULL) { | ||
| 31 | + /* | ||
| 32 | + * Because termcap did not provide a more general solution such as | ||
| 33 | + * tparm(), it was necessary to handle single-parameter capabilities | ||
| 34 | + * using tgoto(). The internal _nc_tiparm() function returns a NULL | ||
| 35 | + * for that case; retry for the single-parameter case. | ||
| 36 | + */ | ||
| 37 | + result = TIPARM_1(string, y); | ||
| 38 | + } | ||
| 39 | returnPtr(result); | ||
| 40 | } | ||
| 41 | diff --git a/ncurses/tinfo/lib_tparm.c b/ncurses/tinfo/lib_tparm.c | ||
| 42 | index d9bdfd8f..a10a3877 100644 | ||
| 43 | --- a/ncurses/tinfo/lib_tparm.c | ||
| 44 | +++ b/ncurses/tinfo/lib_tparm.c | ||
| 45 | @@ -1086,6 +1086,64 @@ tparam_internal(TPARM_STATE *tps, const char *string, TPARM_DATA *data) | ||
| 46 | return (TPS(out_buff)); | ||
| 47 | } | ||
| 48 | |||
| 49 | +#ifdef CUR | ||
| 50 | +/* | ||
| 51 | + * Only a few standard capabilities accept string parameters. The others that | ||
| 52 | + * are parameterized accept only numeric parameters. | ||
| 53 | + */ | ||
| 54 | +static bool | ||
| 55 | +check_string_caps(TPARM_DATA *data, const char *string) | ||
| 56 | +{ | ||
| 57 | + bool result = FALSE; | ||
| 58 | + | ||
| 59 | +#define CHECK_CAP(name) (VALID_STRING(name) && !strcmp(name, string)) | ||
| 60 | + | ||
| 61 | + /* | ||
| 62 | + * Disallow string parameters unless we can check them against a terminal | ||
| 63 | + * description. | ||
| 64 | + */ | ||
| 65 | + if (cur_term != NULL) { | ||
| 66 | + int want_type = 0; | ||
| 67 | + | ||
| 68 | + if (CHECK_CAP(pkey_key)) | ||
| 69 | + want_type = 2; /* function key #1, type string #2 */ | ||
| 70 | + else if (CHECK_CAP(pkey_local)) | ||
| 71 | + want_type = 2; /* function key #1, execute string #2 */ | ||
| 72 | + else if (CHECK_CAP(pkey_xmit)) | ||
| 73 | + want_type = 2; /* function key #1, transmit string #2 */ | ||
| 74 | + else if (CHECK_CAP(plab_norm)) | ||
| 75 | + want_type = 2; /* label #1, show string #2 */ | ||
| 76 | + else if (CHECK_CAP(pkey_plab)) | ||
| 77 | + want_type = 6; /* function key #1, type string #2, show string #3 */ | ||
| 78 | +#if NCURSES_XNAMES | ||
| 79 | + else { | ||
| 80 | + char *check; | ||
| 81 | + | ||
| 82 | + check = tigetstr("Cs"); | ||
| 83 | + if (CHECK_CAP(check)) | ||
| 84 | + want_type = 1; /* style #1 */ | ||
| 85 | + | ||
| 86 | + check = tigetstr("Ms"); | ||
| 87 | + if (CHECK_CAP(check)) | ||
| 88 | + want_type = 3; /* storage unit #1, content #2 */ | ||
| 89 | + } | ||
| 90 | +#endif | ||
| 91 | + | ||
| 92 | + if (want_type == data->tparm_type) { | ||
| 93 | + result = TRUE; | ||
| 94 | + } else { | ||
| 95 | + T(("unexpected string-parameter")); | ||
| 96 | + } | ||
| 97 | + } | ||
| 98 | + return result; | ||
| 99 | +} | ||
| 100 | + | ||
| 101 | +#define ValidCap() (myData.tparm_type == 0 || \ | ||
| 102 | + check_string_caps(&myData, string)) | ||
| 103 | +#else | ||
| 104 | +#define ValidCap() 1 | ||
| 105 | +#endif | ||
| 106 | + | ||
| 107 | #if NCURSES_TPARM_VARARGS | ||
| 108 | |||
| 109 | NCURSES_EXPORT(char *) | ||
| 110 | @@ -1100,7 +1158,7 @@ tparm(const char *string, ...) | ||
| 111 | tps->tname = "tparm"; | ||
| 112 | #endif /* TRACE */ | ||
| 113 | |||
| 114 | - if (tparm_setup(cur_term, string, &myData) == OK) { | ||
| 115 | + if (tparm_setup(cur_term, string, &myData) == OK && ValidCap()) { | ||
| 116 | va_list ap; | ||
| 117 | |||
| 118 | va_start(ap, string); | ||
| 119 | @@ -1135,7 +1193,7 @@ tparm(const char *string, | ||
| 120 | tps->tname = "tparm"; | ||
| 121 | #endif /* TRACE */ | ||
| 122 | |||
| 123 | - if (tparm_setup(cur_term, string, &myData) == OK) { | ||
| 124 | + if (tparm_setup(cur_term, string, &myData) == OK && ValidCap()) { | ||
| 125 | |||
| 126 | myData.param[0] = a1; | ||
| 127 | myData.param[1] = a2; | ||
| 128 | @@ -1166,7 +1224,7 @@ tiparm(const char *string, ...) | ||
| 129 | tps->tname = "tiparm"; | ||
| 130 | #endif /* TRACE */ | ||
| 131 | |||
| 132 | - if (tparm_setup(cur_term, string, &myData) == OK) { | ||
| 133 | + if (tparm_setup(cur_term, string, &myData) == OK && ValidCap()) { | ||
| 134 | va_list ap; | ||
| 135 | |||
| 136 | va_start(ap, string); | ||
| 137 | @@ -1179,7 +1237,25 @@ tiparm(const char *string, ...) | ||
| 138 | } | ||
| 139 | |||
| 140 | /* | ||
| 141 | - * The internal-use flavor ensures that the parameters are numbers, not strings | ||
| 142 | + * The internal-use flavor ensures that parameters are numbers, not strings. | ||
| 143 | + * In addition to ensuring that they are numbers, it ensures that the parameter | ||
| 144 | + * count is consistent with intended usage. | ||
| 145 | + * | ||
| 146 | + * Unlike the general-purpose tparm/tiparm, these internal calls are fairly | ||
| 147 | + * well defined: | ||
| 148 | + * | ||
| 149 | + * expected == 0 - not applicable | ||
| 150 | + * expected == 1 - set color, or vertical/horizontal addressing | ||
| 151 | + * expected == 2 - cursor addressing | ||
| 152 | + * expected == 4 - initialize color or color pair | ||
| 153 | + * expected == 9 - set attributes | ||
| 154 | + * | ||
| 155 | + * Only for the last case (set attributes) should a parameter be optional. | ||
| 156 | + * Also, a capability which calls for more parameters than expected should be | ||
| 157 | + * ignored. | ||
| 158 | + * | ||
| 159 | + * Return a null if the parameter-checks fail. Otherwise, return a pointer to | ||
| 160 | + * the formatted capability string. | ||
| 161 | */ | ||
| 162 | NCURSES_EXPORT(char *) | ||
| 163 | _nc_tiparm(int expected, const char *string, ...) | ||
| 164 | @@ -1189,22 +1265,36 @@ _nc_tiparm(int expected, const char *string, ...) | ||
| 165 | char *result = NULL; | ||
| 166 | |||
| 167 | _nc_tparm_err = 0; | ||
| 168 | + T((T_CALLED("_nc_tiparm(%d, %s, ...)"), expected, _nc_visbuf(string))); | ||
| 169 | #ifdef TRACE | ||
| 170 | tps->tname = "_nc_tiparm"; | ||
| 171 | #endif /* TRACE */ | ||
| 172 | |||
| 173 | - if (tparm_setup(cur_term, string, &myData) == OK | ||
| 174 | - && myData.num_actual <= expected | ||
| 175 | - && myData.tparm_type == 0) { | ||
| 176 | - va_list ap; | ||
| 177 | + if (tparm_setup(cur_term, string, &myData) == OK && ValidCap()) { | ||
| 178 | + if (myData.num_actual == 0) { | ||
| 179 | + T(("missing parameter%s, expected %s%d", | ||
| 180 | + expected > 1 ? "s" : "", | ||
| 181 | + expected == 9 ? "up to " : "", | ||
| 182 | + expected)); | ||
| 183 | + } else if (myData.num_actual > expected) { | ||
| 184 | + T(("too many parameters, have %d, expected %d", | ||
| 185 | + myData.num_actual, | ||
| 186 | + expected)); | ||
| 187 | + } else if (expected != 9 && myData.num_actual != expected) { | ||
| 188 | + T(("expected %d parameters, have %d", | ||
| 189 | + myData.num_actual, | ||
| 190 | + expected)); | ||
| 191 | + } else { | ||
| 192 | + va_list ap; | ||
| 193 | |||
| 194 | - va_start(ap, string); | ||
| 195 | - tparm_copy_valist(&myData, FALSE, ap); | ||
| 196 | - va_end(ap); | ||
| 197 | + va_start(ap, string); | ||
| 198 | + tparm_copy_valist(&myData, FALSE, ap); | ||
| 199 | + va_end(ap); | ||
| 200 | |||
| 201 | - result = tparam_internal(tps, string, &myData); | ||
| 202 | + result = tparam_internal(tps, string, &myData); | ||
| 203 | + } | ||
| 204 | } | ||
| 205 | - return result; | ||
| 206 | + returnPtr(result); | ||
| 207 | } | ||
| 208 | |||
| 209 | /* | ||
| 210 | diff --git a/ncurses/tinfo/read_entry.c b/ncurses/tinfo/read_entry.c | ||
| 211 | index 2b1875ed..341337d2 100644 | ||
| 212 | --- a/ncurses/tinfo/read_entry.c | ||
| 213 | +++ b/ncurses/tinfo/read_entry.c | ||
| 214 | @@ -323,6 +323,9 @@ _nc_read_termtype(TERMTYPE2 *ptr, char *buffer, int limit) | ||
| 215 | || bool_count < 0 | ||
| 216 | || num_count < 0 | ||
| 217 | || str_count < 0 | ||
| 218 | + || bool_count > BOOLCOUNT | ||
| 219 | + || num_count > NUMCOUNT | ||
| 220 | + || str_count > STRCOUNT | ||
| 221 | || str_size < 0) { | ||
| 222 | returnDB(TGETENT_NO); | ||
| 223 | } | ||
| 224 | diff --git a/progs/tic.c b/progs/tic.c | ||
| 225 | index 93a0b491..888927e2 100644 | ||
| 226 | --- a/progs/tic.c | ||
| 227 | +++ b/progs/tic.c | ||
| 228 | @@ -2270,9 +2270,15 @@ check_1_infotocap(const char *name, NCURSES_CONST char *value, int count) | ||
| 229 | |||
| 230 | _nc_reset_tparm(NULL); | ||
| 231 | switch (actual) { | ||
| 232 | + case Str: | ||
| 233 | + result = TPARM_1(value, strings[1]); | ||
| 234 | + break; | ||
| 235 | case Num_Str: | ||
| 236 | result = TPARM_2(value, numbers[1], strings[2]); | ||
| 237 | break; | ||
| 238 | + case Str_Str: | ||
| 239 | + result = TPARM_2(value, strings[1], strings[2]); | ||
| 240 | + break; | ||
| 241 | case Num_Str_Str: | ||
| 242 | result = TPARM_3(value, numbers[1], strings[2], strings[3]); | ||
| 243 | break; | ||
| 244 | diff --git a/progs/tparm_type.c b/progs/tparm_type.c | ||
| 245 | index 3da4a077..644aa62a 100644 | ||
| 246 | --- a/progs/tparm_type.c | ||
| 247 | +++ b/progs/tparm_type.c | ||
| 248 | @@ -47,6 +47,7 @@ tparm_type(const char *name) | ||
| 249 | {code, {longname} }, \ | ||
| 250 | {code, {ti} }, \ | ||
| 251 | {code, {tc} } | ||
| 252 | +#define XD(code, onlyname) TD(code, onlyname, onlyname, onlyname) | ||
| 253 | TParams result = Numbers; | ||
| 254 | /* *INDENT-OFF* */ | ||
| 255 | static const struct { | ||
| 256 | @@ -58,6 +59,10 @@ tparm_type(const char *name) | ||
| 257 | TD(Num_Str, "pkey_xmit", "pfx", "px"), | ||
| 258 | TD(Num_Str, "plab_norm", "pln", "pn"), | ||
| 259 | TD(Num_Str_Str, "pkey_plab", "pfxl", "xl"), | ||
| 260 | +#if NCURSES_XNAMES | ||
| 261 | + XD(Str, "Cs"), | ||
| 262 | + XD(Str_Str, "Ms"), | ||
| 263 | +#endif | ||
| 264 | }; | ||
| 265 | /* *INDENT-ON* */ | ||
| 266 | |||
| 267 | @@ -80,12 +85,16 @@ guess_tparm_type(int nparam, char **p_is_s) | ||
| 268 | case 1: | ||
| 269 | if (!p_is_s[0]) | ||
| 270 | result = Numbers; | ||
| 271 | + if (p_is_s[0]) | ||
| 272 | + result = Str; | ||
| 273 | break; | ||
| 274 | case 2: | ||
| 275 | if (!p_is_s[0] && !p_is_s[1]) | ||
| 276 | result = Numbers; | ||
| 277 | if (!p_is_s[0] && p_is_s[1]) | ||
| 278 | result = Num_Str; | ||
| 279 | + if (p_is_s[0] && p_is_s[1]) | ||
| 280 | + result = Str_Str; | ||
| 281 | break; | ||
| 282 | case 3: | ||
| 283 | if (!p_is_s[0] && !p_is_s[1] && !p_is_s[2]) | ||
| 284 | diff --git a/progs/tparm_type.h b/progs/tparm_type.h | ||
| 285 | index 7c102a30..af5bcf0f 100644 | ||
| 286 | --- a/progs/tparm_type.h | ||
| 287 | +++ b/progs/tparm_type.h | ||
| 288 | @@ -45,8 +45,10 @@ | ||
| 289 | typedef enum { | ||
| 290 | Other = -1 | ||
| 291 | ,Numbers = 0 | ||
| 292 | + ,Str | ||
| 293 | ,Num_Str | ||
| 294 | ,Num_Str_Str | ||
| 295 | + ,Str_Str | ||
| 296 | } TParams; | ||
| 297 | |||
| 298 | extern TParams tparm_type(const char *name); | ||
| 299 | diff --git a/progs/tput.c b/progs/tput.c | ||
| 300 | index 4cd0c5ba..41508b72 100644 | ||
| 301 | --- a/progs/tput.c | ||
| 302 | +++ b/progs/tput.c | ||
| 303 | @@ -1,5 +1,5 @@ | ||
| 304 | /**************************************************************************** | ||
| 305 | - * Copyright 2018-2021,2022 Thomas E. Dickey * | ||
| 306 | + * Copyright 2018-2022,2023 Thomas E. Dickey * | ||
| 307 | * Copyright 1998-2016,2017 Free Software Foundation, Inc. * | ||
| 308 | * * | ||
| 309 | * Permission is hereby granted, free of charge, to any person obtaining a * | ||
| 310 | @@ -47,12 +47,15 @@ | ||
| 311 | #include <transform.h> | ||
| 312 | #include <tty_settings.h> | ||
| 313 | |||
| 314 | -MODULE_ID("$Id: tput.c,v 1.99 2022/02/26 23:19:31 tom Exp $") | ||
| 315 | +MODULE_ID("$Id: tput.c,v 1.102 2023/04/08 16:26:36 tom Exp $") | ||
| 316 | |||
| 317 | #define PUTS(s) fputs(s, stdout) | ||
| 318 | |||
| 319 | const char *_nc_progname = "tput"; | ||
| 320 | |||
| 321 | +static bool opt_v = FALSE; /* quiet, do not show warnings */ | ||
| 322 | +static bool opt_x = FALSE; /* clear scrollback if possible */ | ||
| 323 | + | ||
| 324 | static bool is_init = FALSE; | ||
| 325 | static bool is_reset = FALSE; | ||
| 326 | static bool is_clear = FALSE; | ||
| 327 | @@ -81,6 +84,7 @@ usage(const char *optstring) | ||
| 328 | KEEP(" -S << read commands from standard input") | ||
| 329 | KEEP(" -T TERM use this instead of $TERM") | ||
| 330 | KEEP(" -V print curses-version") | ||
| 331 | + KEEP(" -v verbose, show warnings") | ||
| 332 | KEEP(" -x do not try to clear scrollback") | ||
| 333 | KEEP("") | ||
| 334 | KEEP("Commands:") | ||
| 335 | @@ -148,7 +152,7 @@ exit_code(int token, int value) | ||
| 336 | * Returns nonzero on error. | ||
| 337 | */ | ||
| 338 | static int | ||
| 339 | -tput_cmd(int fd, TTY * settings, bool opt_x, int argc, char **argv, int *used) | ||
| 340 | +tput_cmd(int fd, TTY * settings, int argc, char **argv, int *used) | ||
| 341 | { | ||
| 342 | NCURSES_CONST char *name; | ||
| 343 | char *s; | ||
| 344 | @@ -231,7 +235,9 @@ tput_cmd(int fd, TTY * settings, bool opt_x, int argc, char **argv, int *used) | ||
| 345 | } else if (VALID_STRING(s)) { | ||
| 346 | if (argc > 1) { | ||
| 347 | int k; | ||
| 348 | + int narg; | ||
| 349 | int analyzed; | ||
| 350 | + int provided; | ||
| 351 | int popcount; | ||
| 352 | long numbers[1 + NUM_PARM]; | ||
| 353 | char *strings[1 + NUM_PARM]; | ||
| 354 | @@ -271,14 +277,45 @@ tput_cmd(int fd, TTY * settings, bool opt_x, int argc, char **argv, int *used) | ||
| 355 | |||
| 356 | popcount = 0; | ||
| 357 | _nc_reset_tparm(NULL); | ||
| 358 | + /* | ||
| 359 | + * Count the number of numeric parameters which are provided. | ||
| 360 | + */ | ||
| 361 | + provided = 0; | ||
| 362 | + for (narg = 1; narg < argc; ++narg) { | ||
| 363 | + char *ending = NULL; | ||
| 364 | + long check = strtol(argv[narg], &ending, 10); | ||
| 365 | + if (check < 0 || ending == argv[narg] || *ending != '\0') | ||
| 366 | + break; | ||
| 367 | + provided = narg; | ||
| 368 | + } | ||
| 369 | switch (paramType) { | ||
| 370 | + case Str: | ||
| 371 | + s = TPARM_1(s, strings[1]); | ||
| 372 | + analyzed = 1; | ||
| 373 | + if (provided == 0 && argc >= 1) | ||
| 374 | + provided++; | ||
| 375 | + break; | ||
| 376 | + case Str_Str: | ||
| 377 | + s = TPARM_2(s, strings[1], strings[2]); | ||
| 378 | + analyzed = 2; | ||
| 379 | + if (provided == 0 && argc >= 1) | ||
| 380 | + provided++; | ||
| 381 | + if (provided == 1 && argc >= 2) | ||
| 382 | + provided++; | ||
| 383 | + break; | ||
| 384 | case Num_Str: | ||
| 385 | s = TPARM_2(s, numbers[1], strings[2]); | ||
| 386 | analyzed = 2; | ||
| 387 | + if (provided == 1 && argc >= 2) | ||
| 388 | + provided++; | ||
| 389 | break; | ||
| 390 | case Num_Str_Str: | ||
| 391 | s = TPARM_3(s, numbers[1], strings[2], strings[3]); | ||
| 392 | analyzed = 3; | ||
| 393 | + if (provided == 1 && argc >= 2) | ||
| 394 | + provided++; | ||
| 395 | + if (provided == 2 && argc >= 3) | ||
| 396 | + provided++; | ||
| 397 | break; | ||
| 398 | case Numbers: | ||
| 399 | analyzed = _nc_tparm_analyze(NULL, s, p_is_s, &popcount); | ||
| 400 | @@ -316,7 +353,13 @@ tput_cmd(int fd, TTY * settings, bool opt_x, int argc, char **argv, int *used) | ||
| 401 | if (analyzed < popcount) { | ||
| 402 | analyzed = popcount; | ||
| 403 | } | ||
| 404 | - *used += analyzed; | ||
| 405 | + if (opt_v && (analyzed != provided)) { | ||
| 406 | + fprintf(stderr, "%s: %s parameters for \"%s\"\n", | ||
| 407 | + _nc_progname, | ||
| 408 | + (analyzed < provided ? "extra" : "missing"), | ||
| 409 | + argv[0]); | ||
| 410 | + } | ||
| 411 | + *used += provided; | ||
| 412 | } | ||
| 413 | |||
| 414 | /* use putp() in order to perform padding */ | ||
| 415 | @@ -339,7 +382,6 @@ main(int argc, char **argv) | ||
| 416 | int used; | ||
| 417 | TTY old_settings; | ||
| 418 | TTY tty_settings; | ||
| 419 | - bool opt_x = FALSE; /* clear scrollback if possible */ | ||
| 420 | bool is_alias; | ||
| 421 | bool need_tty; | ||
| 422 | |||
| 423 | @@ -348,7 +390,7 @@ main(int argc, char **argv) | ||
| 424 | |||
| 425 | term = getenv("TERM"); | ||
| 426 | |||
| 427 | - while ((c = getopt(argc, argv, is_alias ? "T:Vx" : "ST:Vx")) != -1) { | ||
| 428 | + while ((c = getopt(argc, argv, is_alias ? "T:Vvx" : "ST:Vvx")) != -1) { | ||
| 429 | switch (c) { | ||
| 430 | case 'S': | ||
| 431 | cmdline = FALSE; | ||
| 432 | @@ -361,6 +403,9 @@ main(int argc, char **argv) | ||
| 433 | case 'V': | ||
| 434 | puts(curses_version()); | ||
| 435 | ExitProgram(EXIT_SUCCESS); | ||
| 436 | + case 'v': /* verbose */ | ||
| 437 | + opt_v = TRUE; | ||
| 438 | + break; | ||
| 439 | case 'x': /* do not try to clear scrollback */ | ||
| 440 | opt_x = TRUE; | ||
| 441 | break; | ||
| 442 | @@ -404,7 +449,7 @@ main(int argc, char **argv) | ||
| 443 | usage(NULL); | ||
| 444 | while (argc > 0) { | ||
| 445 | tty_settings = old_settings; | ||
| 446 | - code = tput_cmd(fd, &tty_settings, opt_x, argc, argv, &used); | ||
| 447 | + code = tput_cmd(fd, &tty_settings, argc, argv, &used); | ||
| 448 | if (code != 0) | ||
| 449 | break; | ||
| 450 | argc -= used; | ||
| 451 | @@ -439,7 +484,7 @@ main(int argc, char **argv) | ||
| 452 | while (argnum > 0) { | ||
| 453 | int code; | ||
| 454 | tty_settings = old_settings; | ||
| 455 | - code = tput_cmd(fd, &tty_settings, opt_x, argnum, argnow, &used); | ||
| 456 | + code = tput_cmd(fd, &tty_settings, argnum, argnow, &used); | ||
| 457 | if (code != 0) { | ||
| 458 | if (result == 0) | ||
| 459 | result = ErrSystem(0); /* will return value >4 */ | ||
| 460 | -- | ||
| 461 | 2.40.0 | ||
| 462 | |||
diff --git a/meta/recipes-core/ncurses/files/0001-Updating-reset-code-ncurses-6.4-patch-20231104.patch b/meta/recipes-core/ncurses/files/0001-Updating-reset-code-ncurses-6.4-patch-20231104.patch deleted file mode 100644 index 121db6bffe..0000000000 --- a/meta/recipes-core/ncurses/files/0001-Updating-reset-code-ncurses-6.4-patch-20231104.patch +++ /dev/null | |||
| @@ -1,499 +0,0 @@ | |||
| 1 | From 135d37072755704b8d018e5de74e62ff3f28c930 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Thomas E. Dickey <dickey@invisible-island.net> | ||
| 3 | Date: Sun, 5 Nov 2023 05:54:54 +0530 | ||
| 4 | Subject: [PATCH] Updating reset code - ncurses 6.4 - patch 20231104 | ||
| 5 | |||
| 6 | + modify reset command to avoid altering clocal if the terminal uses a | ||
| 7 | modem (prompted by discussion with Werner Fink, Michal Suchanek, | ||
| 8 | OpenSUSE #1201384, Debian #60377). | ||
| 9 | + build-fixes for --with-caps variations. | ||
| 10 | + correct a couple of section-references in INSTALL. | ||
| 11 | |||
| 12 | Signed-off-by: Thomas E. Dickey <dickey@invisible-island.net> | ||
| 13 | |||
| 14 | Upstream-Status: Backport [https://ncurses.scripts.mit.edu/?p=ncurses.git;a=commitdiff;h=135d37072755704b8d018e5de74e62ff3f28c930] | ||
| 15 | |||
| 16 | Signed-off-by: Soumya Sambu <soumya.sambu@windriver.com> | ||
| 17 | --- | ||
| 18 | INSTALL | 8 +- | ||
| 19 | include/curses.events | 2 +- | ||
| 20 | ncurses/tinfo/lib_tparm.c | 2 + | ||
| 21 | progs/reset_cmd.c | 281 +++++++++++++++++++++----------------- | ||
| 22 | progs/tabs.c | 10 +- | ||
| 23 | progs/tic.c | 4 + | ||
| 24 | 6 files changed, 176 insertions(+), 131 deletions(-) | ||
| 25 | |||
| 26 | diff --git a/INSTALL b/INSTALL | ||
| 27 | index d9c1dd12..d0a39af0 100644 | ||
| 28 | --- a/INSTALL | ||
| 29 | +++ b/INSTALL | ||
| 30 | @@ -47,7 +47,7 @@ If you are converting from BSD curses and do not have root access, be sure | ||
| 31 | to read the BSD CONVERSION NOTES section below. | ||
| 32 | |||
| 33 | If you are trying to build applications using gpm with ncurses, | ||
| 34 | -read the USING NCURSES WITH GPM section below. | ||
| 35 | +read the USING GPM section below. | ||
| 36 | |||
| 37 | If you are cross-compiling, see the note below on BUILDING WITH A CROSS-COMPILER. | ||
| 38 | |||
| 39 | @@ -79,7 +79,7 @@ INSTALLATION PROCEDURE: | ||
| 40 | The --prefix option to configure changes the root directory for installing | ||
| 41 | ncurses. The default is normally in subdirectories of /usr/local, except | ||
| 42 | for systems where ncurses is normally installed as a system library (see | ||
| 43 | - "IF YOU ARE A SYSTEM INTEGRATOR"). Use --prefix=/usr to replace your | ||
| 44 | + "FOR SYSTEM INTEGRATORS"). Use --prefix=/usr to replace your | ||
| 45 | default curses distribution. | ||
| 46 | |||
| 47 | The package gets installed beneath the --prefix directory as follows: | ||
| 48 | @@ -176,7 +176,7 @@ INSTALLATION PROCEDURE: | ||
| 49 | You can make curses and terminfo fall back to an existing file of termcap | ||
| 50 | definitions by configuring with --enable-termcap. If you do this, the | ||
| 51 | library will search /etc/termcap before the terminfo database, and will | ||
| 52 | - also interpret the contents of the TERM environment variable. See the | ||
| 53 | + also interpret the contents of the $TERM environment variable. See the | ||
| 54 | section BSD CONVERSION NOTES below. | ||
| 55 | |||
| 56 | 3. Type `make'. Ignore any warnings, no error messages should be produced. | ||
| 57 | @@ -1231,7 +1231,7 @@ CONFIGURE OPTIONS: | ||
| 58 | Specify a search-list of terminfo directories which will be compiled | ||
| 59 | into the ncurses library (default: DATADIR/terminfo) | ||
| 60 | |||
| 61 | - This is a colon-separated list, like the TERMINFO_DIRS environment | ||
| 62 | + This is a colon-separated list, like the $TERMINFO_DIRS environment | ||
| 63 | variable. | ||
| 64 | |||
| 65 | --with-termlib[=XXX] | ||
| 66 | diff --git a/include/curses.events b/include/curses.events | ||
| 67 | index 25a2583f..468bde18 100644 | ||
| 68 | --- a/include/curses.events | ||
| 69 | +++ b/include/curses.events | ||
| 70 | @@ -50,6 +50,6 @@ typedef struct | ||
| 71 | extern NCURSES_EXPORT(int) wgetch_events (WINDOW *, _nc_eventlist *) GCC_DEPRECATED(experimental option); /* experimental */ | ||
| 72 | extern NCURSES_EXPORT(int) wgetnstr_events (WINDOW *,char *,int,_nc_eventlist *) GCC_DEPRECATED(experimental option); /* experimental */ | ||
| 73 | |||
| 74 | -#define KEY_EVENT 0633 /* We were interrupted by an event */ | ||
| 75 | +#define KEY_EVENT 0634 /* We were interrupted by an event */ | ||
| 76 | |||
| 77 | #endif /* NCURSES_WGETCH_EVENTS */ | ||
| 78 | diff --git a/ncurses/tinfo/lib_tparm.c b/ncurses/tinfo/lib_tparm.c | ||
| 79 | index a10a3877..cd972c0f 100644 | ||
| 80 | --- a/ncurses/tinfo/lib_tparm.c | ||
| 81 | +++ b/ncurses/tinfo/lib_tparm.c | ||
| 82 | @@ -1113,8 +1113,10 @@ check_string_caps(TPARM_DATA *data, const char *string) | ||
| 83 | want_type = 2; /* function key #1, transmit string #2 */ | ||
| 84 | else if (CHECK_CAP(plab_norm)) | ||
| 85 | want_type = 2; /* label #1, show string #2 */ | ||
| 86 | +#ifdef pkey_plab | ||
| 87 | else if (CHECK_CAP(pkey_plab)) | ||
| 88 | want_type = 6; /* function key #1, type string #2, show string #3 */ | ||
| 89 | +#endif | ||
| 90 | #if NCURSES_XNAMES | ||
| 91 | else { | ||
| 92 | char *check; | ||
| 93 | diff --git a/progs/reset_cmd.c b/progs/reset_cmd.c | ||
| 94 | index eff3af72..aec4b077 100644 | ||
| 95 | --- a/progs/reset_cmd.c | ||
| 96 | +++ b/progs/reset_cmd.c | ||
| 97 | @@ -75,6 +75,9 @@ MODULE_ID("$Id: reset_cmd.c,v 1.28 2021/10/02 18:08:44 tom Exp $") | ||
| 98 | # endif | ||
| 99 | #endif | ||
| 100 | |||
| 101 | +#define set_flags(target, mask) target |= mask | ||
| 102 | +#define clear_flags(target, mask) target &= ~((unsigned)(mask)) | ||
| 103 | + | ||
| 104 | static FILE *my_file; | ||
| 105 | |||
| 106 | static bool use_reset = FALSE; /* invoked as reset */ | ||
| 107 | @@ -188,6 +191,79 @@ out_char(int c) | ||
| 108 | #define reset_char(item, value) \ | ||
| 109 | tty_settings->c_cc[item] = CHK(tty_settings->c_cc[item], value) | ||
| 110 | |||
| 111 | +/* | ||
| 112 | + * Simplify ifdefs | ||
| 113 | + */ | ||
| 114 | +#ifndef BSDLY | ||
| 115 | +#define BSDLY 0 | ||
| 116 | +#endif | ||
| 117 | +#ifndef CRDLY | ||
| 118 | +#define CRDLY 0 | ||
| 119 | +#endif | ||
| 120 | +#ifndef ECHOCTL | ||
| 121 | +#define ECHOCTL 0 | ||
| 122 | +#endif | ||
| 123 | +#ifndef ECHOKE | ||
| 124 | +#define ECHOKE 0 | ||
| 125 | +#endif | ||
| 126 | +#ifndef ECHOPRT | ||
| 127 | +#define ECHOPRT 0 | ||
| 128 | +#endif | ||
| 129 | +#ifndef FFDLY | ||
| 130 | +#define FFDLY 0 | ||
| 131 | +#endif | ||
| 132 | +#ifndef IMAXBEL | ||
| 133 | +#define IMAXBEL 0 | ||
| 134 | +#endif | ||
| 135 | +#ifndef IUCLC | ||
| 136 | +#define IUCLC 0 | ||
| 137 | +#endif | ||
| 138 | +#ifndef IXANY | ||
| 139 | +#define IXANY 0 | ||
| 140 | +#endif | ||
| 141 | +#ifndef NLDLY | ||
| 142 | +#define NLDLY 0 | ||
| 143 | +#endif | ||
| 144 | +#ifndef OCRNL | ||
| 145 | +#define OCRNL 0 | ||
| 146 | +#endif | ||
| 147 | +#ifndef OFDEL | ||
| 148 | +#define OFDEL 0 | ||
| 149 | +#endif | ||
| 150 | +#ifndef OFILL | ||
| 151 | +#define OFILL 0 | ||
| 152 | +#endif | ||
| 153 | +#ifndef OLCUC | ||
| 154 | +#define OLCUC 0 | ||
| 155 | +#endif | ||
| 156 | +#ifndef ONLCR | ||
| 157 | +#define ONLCR 0 | ||
| 158 | +#endif | ||
| 159 | +#ifndef ONLRET | ||
| 160 | +#define ONLRET 0 | ||
| 161 | +#endif | ||
| 162 | +#ifndef ONOCR | ||
| 163 | +#define ONOCR 0 | ||
| 164 | +#endif | ||
| 165 | +#ifndef OXTABS | ||
| 166 | +#define OXTABS 0 | ||
| 167 | +#endif | ||
| 168 | +#ifndef TAB3 | ||
| 169 | +#define TAB3 0 | ||
| 170 | +#endif | ||
| 171 | +#ifndef TABDLY | ||
| 172 | +#define TABDLY 0 | ||
| 173 | +#endif | ||
| 174 | +#ifndef TOSTOP | ||
| 175 | +#define TOSTOP 0 | ||
| 176 | +#endif | ||
| 177 | +#ifndef VTDLY | ||
| 178 | +#define VTDLY 0 | ||
| 179 | +#endif | ||
| 180 | +#ifndef XCASE | ||
| 181 | +#define XCASE 0 | ||
| 182 | +#endif | ||
| 183 | + | ||
| 184 | /* | ||
| 185 | * Reset the terminal mode bits to a sensible state. Very useful after | ||
| 186 | * a child program dies in raw mode. | ||
| 187 | @@ -195,6 +271,10 @@ out_char(int c) | ||
| 188 | void | ||
| 189 | reset_tty_settings(int fd, TTY * tty_settings, int noset) | ||
| 190 | { | ||
| 191 | + unsigned mask; | ||
| 192 | +#ifdef TIOCMGET | ||
| 193 | + int modem_bits; | ||
| 194 | +#endif | ||
| 195 | GET_TTY(fd, tty_settings); | ||
| 196 | |||
| 197 | #ifdef TERMIOS | ||
| 198 | @@ -228,106 +308,65 @@ reset_tty_settings(int fd, TTY * tty_settings, int noset) | ||
| 199 | reset_char(VWERASE, CWERASE); | ||
| 200 | #endif | ||
| 201 | |||
| 202 | - tty_settings->c_iflag &= ~((unsigned) (IGNBRK | ||
| 203 | - | PARMRK | ||
| 204 | - | INPCK | ||
| 205 | - | ISTRIP | ||
| 206 | - | INLCR | ||
| 207 | - | IGNCR | ||
| 208 | -#ifdef IUCLC | ||
| 209 | - | IUCLC | ||
| 210 | -#endif | ||
| 211 | -#ifdef IXANY | ||
| 212 | - | IXANY | ||
| 213 | -#endif | ||
| 214 | - | IXOFF)); | ||
| 215 | - | ||
| 216 | - tty_settings->c_iflag |= (BRKINT | ||
| 217 | - | IGNPAR | ||
| 218 | - | ICRNL | ||
| 219 | - | IXON | ||
| 220 | -#ifdef IMAXBEL | ||
| 221 | - | IMAXBEL | ||
| 222 | -#endif | ||
| 223 | - ); | ||
| 224 | - | ||
| 225 | - tty_settings->c_oflag &= ~((unsigned) (0 | ||
| 226 | -#ifdef OLCUC | ||
| 227 | - | OLCUC | ||
| 228 | -#endif | ||
| 229 | -#ifdef OCRNL | ||
| 230 | - | OCRNL | ||
| 231 | -#endif | ||
| 232 | -#ifdef ONOCR | ||
| 233 | - | ONOCR | ||
| 234 | -#endif | ||
| 235 | -#ifdef ONLRET | ||
| 236 | - | ONLRET | ||
| 237 | -#endif | ||
| 238 | -#ifdef OFILL | ||
| 239 | - | OFILL | ||
| 240 | -#endif | ||
| 241 | -#ifdef OFDEL | ||
| 242 | - | OFDEL | ||
| 243 | -#endif | ||
| 244 | -#ifdef NLDLY | ||
| 245 | - | NLDLY | ||
| 246 | -#endif | ||
| 247 | -#ifdef CRDLY | ||
| 248 | - | CRDLY | ||
| 249 | -#endif | ||
| 250 | -#ifdef TABDLY | ||
| 251 | - | TABDLY | ||
| 252 | -#endif | ||
| 253 | -#ifdef BSDLY | ||
| 254 | - | BSDLY | ||
| 255 | -#endif | ||
| 256 | -#ifdef VTDLY | ||
| 257 | - | VTDLY | ||
| 258 | -#endif | ||
| 259 | -#ifdef FFDLY | ||
| 260 | - | FFDLY | ||
| 261 | -#endif | ||
| 262 | - )); | ||
| 263 | - | ||
| 264 | - tty_settings->c_oflag |= (OPOST | ||
| 265 | -#ifdef ONLCR | ||
| 266 | - | ONLCR | ||
| 267 | -#endif | ||
| 268 | - ); | ||
| 269 | - | ||
| 270 | - tty_settings->c_cflag &= ~((unsigned) (CSIZE | ||
| 271 | - | CSTOPB | ||
| 272 | - | PARENB | ||
| 273 | - | PARODD | ||
| 274 | - | CLOCAL)); | ||
| 275 | - tty_settings->c_cflag |= (CS8 | CREAD); | ||
| 276 | - tty_settings->c_lflag &= ~((unsigned) (ECHONL | ||
| 277 | - | NOFLSH | ||
| 278 | -#ifdef TOSTOP | ||
| 279 | - | TOSTOP | ||
| 280 | -#endif | ||
| 281 | -#ifdef ECHOPTR | ||
| 282 | - | ECHOPRT | ||
| 283 | -#endif | ||
| 284 | -#ifdef XCASE | ||
| 285 | - | XCASE | ||
| 286 | -#endif | ||
| 287 | - )); | ||
| 288 | - | ||
| 289 | - tty_settings->c_lflag |= (ISIG | ||
| 290 | - | ICANON | ||
| 291 | - | ECHO | ||
| 292 | - | ECHOE | ||
| 293 | - | ECHOK | ||
| 294 | -#ifdef ECHOCTL | ||
| 295 | - | ECHOCTL | ||
| 296 | -#endif | ||
| 297 | -#ifdef ECHOKE | ||
| 298 | - | ECHOKE | ||
| 299 | -#endif | ||
| 300 | - ); | ||
| 301 | -#endif | ||
| 302 | + clear_flags(tty_settings->c_iflag, (IGNBRK | ||
| 303 | + | PARMRK | ||
| 304 | + | INPCK | ||
| 305 | + | ISTRIP | ||
| 306 | + | INLCR | ||
| 307 | + | IGNCR | ||
| 308 | + | IUCLC | ||
| 309 | + | IXANY | ||
| 310 | + | IXOFF)); | ||
| 311 | + | ||
| 312 | + set_flags(tty_settings->c_iflag, (BRKINT | ||
| 313 | + | IGNPAR | ||
| 314 | + | ICRNL | ||
| 315 | + | IXON | ||
| 316 | + | IMAXBEL)); | ||
| 317 | + | ||
| 318 | + clear_flags(tty_settings->c_oflag, (0 | ||
| 319 | + | OLCUC | ||
| 320 | + | OCRNL | ||
| 321 | + | ONOCR | ||
| 322 | + | ONLRET | ||
| 323 | + | OFILL | ||
| 324 | + | OFDEL | ||
| 325 | + | NLDLY | ||
| 326 | + | CRDLY | ||
| 327 | + | TABDLY | ||
| 328 | + | BSDLY | ||
| 329 | + | VTDLY | ||
| 330 | + | FFDLY)); | ||
| 331 | + | ||
| 332 | + set_flags(tty_settings->c_oflag, (OPOST | ||
| 333 | + | ONLCR)); | ||
| 334 | + | ||
| 335 | + mask = (CSIZE | CSTOPB | PARENB | PARODD); | ||
| 336 | +#ifdef TIOCMGET | ||
| 337 | + /* leave clocal alone if this appears to use a modem */ | ||
| 338 | + if (ioctl(fd, TIOCMGET, &modem_bits) == -1) | ||
| 339 | + mask |= CLOCAL; | ||
| 340 | +#else | ||
| 341 | + /* cannot check - use the behavior from tset */ | ||
| 342 | + mask |= CLOCAL; | ||
| 343 | +#endif | ||
| 344 | + clear_flags(tty_settings->c_cflag, mask); | ||
| 345 | + | ||
| 346 | + set_flags(tty_settings->c_cflag, (CS8 | CREAD)); | ||
| 347 | + clear_flags(tty_settings->c_lflag, (ECHONL | ||
| 348 | + | NOFLSH | ||
| 349 | + | TOSTOP | ||
| 350 | + | ECHOPRT | ||
| 351 | + | XCASE)); | ||
| 352 | + | ||
| 353 | + set_flags(tty_settings->c_lflag, (ISIG | ||
| 354 | + | ICANON | ||
| 355 | + | ECHO | ||
| 356 | + | ECHOE | ||
| 357 | + | ECHOK | ||
| 358 | + | ECHOCTL | ||
| 359 | + | ECHOKE)); | ||
| 360 | +#endif /* TERMIOS */ | ||
| 361 | |||
| 362 | if (!noset) { | ||
| 363 | SET_TTY(fd, tty_settings); | ||
| 364 | @@ -402,29 +441,23 @@ set_conversions(TTY * tty_settings) | ||
| 365 | #if defined(EXP_WIN32_DRIVER) | ||
| 366 | /* FIXME */ | ||
| 367 | #else | ||
| 368 | -#ifdef ONLCR | ||
| 369 | - tty_settings->c_oflag |= ONLCR; | ||
| 370 | -#endif | ||
| 371 | - tty_settings->c_iflag |= ICRNL; | ||
| 372 | - tty_settings->c_lflag |= ECHO; | ||
| 373 | -#ifdef OXTABS | ||
| 374 | - tty_settings->c_oflag |= OXTABS; | ||
| 375 | -#endif /* OXTABS */ | ||
| 376 | + set_flags(tty_settings->c_oflag, ONLCR); | ||
| 377 | + set_flags(tty_settings->c_iflag, ICRNL); | ||
| 378 | + set_flags(tty_settings->c_lflag, ECHO); | ||
| 379 | + set_flags(tty_settings->c_oflag, OXTABS); | ||
| 380 | |||
| 381 | /* test used to be tgetflag("NL") */ | ||
| 382 | if (VALID_STRING(newline) && newline[0] == '\n' && !newline[1]) { | ||
| 383 | /* Newline, not linefeed. */ | ||
| 384 | -#ifdef ONLCR | ||
| 385 | - tty_settings->c_oflag &= ~((unsigned) ONLCR); | ||
| 386 | -#endif | ||
| 387 | - tty_settings->c_iflag &= ~((unsigned) ICRNL); | ||
| 388 | + clear_flags(tty_settings->c_oflag, ONLCR); | ||
| 389 | + clear_flags(tty_settings->c_iflag, ICRNL); | ||
| 390 | } | ||
| 391 | -#ifdef OXTABS | ||
| 392 | +#if OXTABS | ||
| 393 | /* test used to be tgetflag("pt") */ | ||
| 394 | if (VALID_STRING(set_tab) && VALID_STRING(clear_all_tabs)) | ||
| 395 | - tty_settings->c_oflag &= ~OXTABS; | ||
| 396 | + clear_flags(tty_settings->c_oflag, OXTABS); | ||
| 397 | #endif /* OXTABS */ | ||
| 398 | - tty_settings->c_lflag |= (ECHOE | ECHOK); | ||
| 399 | + set_flags(tty_settings->c_lflag, (ECHOE | ECHOK)); | ||
| 400 | #endif | ||
| 401 | } | ||
| 402 | |||
| 403 | @@ -490,7 +523,7 @@ send_init_strings(int fd GCC_UNUSED, TTY * old_settings) | ||
| 404 | bool need_flush = FALSE; | ||
| 405 | |||
| 406 | (void) old_settings; | ||
| 407 | -#ifdef TAB3 | ||
| 408 | +#if TAB3 | ||
| 409 | if (old_settings != 0 && | ||
| 410 | old_settings->c_oflag & (TAB3 | ONLCR | OCRNL | ONLRET)) { | ||
| 411 | old_settings->c_oflag &= (TAB3 | ONLCR | OCRNL | ONLRET); | ||
| 412 | @@ -512,22 +545,22 @@ send_init_strings(int fd GCC_UNUSED, TTY * old_settings) | ||
| 413 | |||
| 414 | if (VALID_STRING(clear_margins)) { | ||
| 415 | need_flush |= sent_string(clear_margins); | ||
| 416 | - } else | ||
| 417 | + } | ||
| 418 | #if defined(set_lr_margin) | ||
| 419 | - if (VALID_STRING(set_lr_margin)) { | ||
| 420 | + else if (VALID_STRING(set_lr_margin)) { | ||
| 421 | need_flush |= sent_string(TIPARM_2(set_lr_margin, 0, columns - 1)); | ||
| 422 | - } else | ||
| 423 | + } | ||
| 424 | #endif | ||
| 425 | #if defined(set_left_margin_parm) && defined(set_right_margin_parm) | ||
| 426 | - if (VALID_STRING(set_left_margin_parm) | ||
| 427 | - && VALID_STRING(set_right_margin_parm)) { | ||
| 428 | + else if (VALID_STRING(set_left_margin_parm) | ||
| 429 | + && VALID_STRING(set_right_margin_parm)) { | ||
| 430 | need_flush |= sent_string(TIPARM_1(set_left_margin_parm, 0)); | ||
| 431 | need_flush |= sent_string(TIPARM_1(set_right_margin_parm, | ||
| 432 | columns - 1)); | ||
| 433 | - } else | ||
| 434 | + } | ||
| 435 | #endif | ||
| 436 | - if (VALID_STRING(set_left_margin) | ||
| 437 | - && VALID_STRING(set_right_margin)) { | ||
| 438 | + else if (VALID_STRING(set_left_margin) | ||
| 439 | + && VALID_STRING(set_right_margin)) { | ||
| 440 | need_flush |= to_left_margin(); | ||
| 441 | need_flush |= sent_string(set_left_margin); | ||
| 442 | if (VALID_STRING(parm_right_cursor)) { | ||
| 443 | diff --git a/progs/tabs.c b/progs/tabs.c | ||
| 444 | index 7378d116..d904330b 100644 | ||
| 445 | --- a/progs/tabs.c | ||
| 446 | +++ b/progs/tabs.c | ||
| 447 | @@ -370,7 +370,9 @@ do_set_margin(int margin, bool no_op) | ||
| 448 | } | ||
| 449 | tputs(set_left_margin, 1, putch); | ||
| 450 | } | ||
| 451 | - } else if (VALID_STRING(set_left_margin_parm)) { | ||
| 452 | + } | ||
| 453 | +#if defined(set_left_margin_parm) && defined(set_right_margin_parm) | ||
| 454 | + else if (VALID_STRING(set_left_margin_parm)) { | ||
| 455 | result = TRUE; | ||
| 456 | if (!no_op) { | ||
| 457 | if (VALID_STRING(set_right_margin_parm)) { | ||
| 458 | @@ -379,12 +381,16 @@ do_set_margin(int margin, bool no_op) | ||
| 459 | tputs(TIPARM_2(set_left_margin_parm, margin, max_cols), 1, putch); | ||
| 460 | } | ||
| 461 | } | ||
| 462 | - } else if (VALID_STRING(set_lr_margin)) { | ||
| 463 | + } | ||
| 464 | +#endif | ||
| 465 | +#if defined(set_lr_margin) | ||
| 466 | + else if (VALID_STRING(set_lr_margin)) { | ||
| 467 | result = TRUE; | ||
| 468 | if (!no_op) { | ||
| 469 | tputs(TIPARM_2(set_lr_margin, margin, max_cols), 1, putch); | ||
| 470 | } | ||
| 471 | } | ||
| 472 | +#endif | ||
| 473 | return result; | ||
| 474 | } | ||
| 475 | |||
| 476 | diff --git a/progs/tic.c b/progs/tic.c | ||
| 477 | index 888927e2..78b568fa 100644 | ||
| 478 | --- a/progs/tic.c | ||
| 479 | +++ b/progs/tic.c | ||
| 480 | @@ -3142,6 +3142,7 @@ guess_ANSI_VTxx(TERMTYPE2 *tp) | ||
| 481 | * In particular, any ECMA-48 terminal should support these, though the details | ||
| 482 | * for u9 are implementation dependent. | ||
| 483 | */ | ||
| 484 | +#if defined(user6) && defined(user7) && defined(user8) && defined(user9) | ||
| 485 | static void | ||
| 486 | check_user_6789(TERMTYPE2 *tp) | ||
| 487 | { | ||
| 488 | @@ -3177,6 +3178,9 @@ check_user_6789(TERMTYPE2 *tp) | ||
| 489 | break; | ||
| 490 | } | ||
| 491 | } | ||
| 492 | +#else | ||
| 493 | +#define check_user_6789(tp) /* nothing */ | ||
| 494 | +#endif | ||
| 495 | |||
| 496 | /* other sanity-checks (things that we don't want in the normal | ||
| 497 | * logic that reads a terminfo entry) | ||
| 498 | -- | ||
| 499 | 2.40.0 | ||
diff --git a/meta/recipes-core/ncurses/files/0001-tic-hang.patch b/meta/recipes-core/ncurses/files/0001-tic-hang.patch index f98a943e5c..8cb92a3939 100644 --- a/meta/recipes-core/ncurses/files/0001-tic-hang.patch +++ b/meta/recipes-core/ncurses/files/0001-tic-hang.patch | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | From 168ba7a681be73ac024438e33e14fde1d5aea97d Mon Sep 17 00:00:00 2001 | 1 | From a51a53f0eecfd4d083aba8dfcd47c65e93978ff1 Mon Sep 17 00:00:00 2001 |
| 2 | From: Hongxu Jia <hongxu.jia@windriver.com> | 2 | From: Hongxu Jia <hongxu.jia@windriver.com> |
| 3 | Date: Fri, 30 Mar 2018 10:02:24 +0800 | 3 | Date: Fri, 30 Mar 2018 10:02:24 +0800 |
| 4 | Subject: [PATCH 1/2] tic hang | 4 | Subject: [PATCH] tic hang |
| 5 | 5 | ||
| 6 | Upstream-Status: Inappropriate [configuration] | 6 | Upstream-Status: Inappropriate [configuration] |
| 7 | 7 | ||
| @@ -17,10 +17,10 @@ Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> | |||
| 17 | 1 file changed, 5 insertions(+), 6 deletions(-) | 17 | 1 file changed, 5 insertions(+), 6 deletions(-) |
| 18 | 18 | ||
| 19 | diff --git a/misc/terminfo.src b/misc/terminfo.src | 19 | diff --git a/misc/terminfo.src b/misc/terminfo.src |
| 20 | index 84f4810..6b385ec 100644 | 20 | index 5d575b8e..f9cc6880 100644 |
| 21 | --- a/misc/terminfo.src | 21 | --- a/misc/terminfo.src |
| 22 | +++ b/misc/terminfo.src | 22 | +++ b/misc/terminfo.src |
| 23 | @@ -5562,12 +5562,11 @@ konsole-xf3x|KDE console window with keyboard for XFree86 3.x xterm, | 23 | @@ -6518,12 +6518,11 @@ konsole-xf3x|KDE console window with keyboard for XFree86 3.x xterm, |
| 24 | # The value for kbs (see konsole-vt100) reflects local customization rather | 24 | # The value for kbs (see konsole-vt100) reflects local customization rather |
| 25 | # than the settings used for XFree86 xterm. | 25 | # than the settings used for XFree86 xterm. |
| 26 | konsole-xf4x|KDE console window with keyboard for XFree86 4.x xterm, | 26 | konsole-xf4x|KDE console window with keyboard for XFree86 4.x xterm, |
| @@ -38,6 +38,3 @@ index 84f4810..6b385ec 100644 | |||
| 38 | 38 | ||
| 39 | # Obsolete: vt100.keymap | 39 | # Obsolete: vt100.keymap |
| 40 | # KDE's "vt100" keyboard has no relationship to any terminal that DEC made, but | 40 | # KDE's "vt100" keyboard has no relationship to any terminal that DEC made, but |
| 41 | -- | ||
| 42 | 1.8.3.1 | ||
| 43 | |||
diff --git a/meta/recipes-core/ncurses/files/0002-configure-reproducible.patch b/meta/recipes-core/ncurses/files/0002-configure-reproducible.patch index 66f26c06ab..11ca66c8e8 100644 --- a/meta/recipes-core/ncurses/files/0002-configure-reproducible.patch +++ b/meta/recipes-core/ncurses/files/0002-configure-reproducible.patch | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | From ec87e53066a9942e9aaba817d71268342f5e83b9 Mon Sep 17 00:00:00 2001 | 1 | From 63cf58044f4ab3297c5a2d0e132e87ebfa80c753 Mon Sep 17 00:00:00 2001 |
| 2 | From: Hongxu Jia <hongxu.jia@windriver.com> | 2 | From: Hongxu Jia <hongxu.jia@windriver.com> |
| 3 | Date: Wed, 16 Aug 2017 14:45:27 +0800 | 3 | Date: Wed, 16 Aug 2017 14:45:27 +0800 |
| 4 | Subject: [PATCH] configure: reproducible | 4 | Subject: [PATCH] configure: reproducible |
| @@ -13,16 +13,15 @@ Signed-off-by: Juro Bystricky <juro.bystricky@intel.com> | |||
| 13 | Rebase to 6.1 | 13 | Rebase to 6.1 |
| 14 | 14 | ||
| 15 | Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> | 15 | Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> |
| 16 | |||
| 17 | --- | 16 | --- |
| 18 | configure | 2 +- | 17 | configure | 2 +- |
| 19 | 1 file changed, 1 insertion(+), 1 deletion(-) | 18 | 1 file changed, 1 insertion(+), 1 deletion(-) |
| 20 | 19 | ||
| 21 | diff --git a/configure b/configure | 20 | diff --git a/configure b/configure |
| 22 | index 421cf859..a1b7840d 100755 | 21 | index 488d93fc..005d44e2 100755 |
| 23 | --- a/configure | 22 | --- a/configure |
| 24 | +++ b/configure | 23 | +++ b/configure |
| 25 | @@ -5072,7 +5072,7 @@ else | 24 | @@ -5129,7 +5129,7 @@ else |
| 26 | ;; | 25 | ;; |
| 27 | (*) | 26 | (*) |
| 28 | cf_cv_ar_flags=unknown | 27 | cf_cv_ar_flags=unknown |
diff --git a/meta/recipes-core/ncurses/files/0003-gen-pkgconfig.in-Do-not-include-LDFLAGS-in-generated.patch b/meta/recipes-core/ncurses/files/0003-gen-pkgconfig.in-Do-not-include-LDFLAGS-in-generated.patch index a15694d4d4..d89399bbe5 100644 --- a/meta/recipes-core/ncurses/files/0003-gen-pkgconfig.in-Do-not-include-LDFLAGS-in-generated.patch +++ b/meta/recipes-core/ncurses/files/0003-gen-pkgconfig.in-Do-not-include-LDFLAGS-in-generated.patch | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | From 10cd0c12a6e14fb4f0498c299c1dd32720b710da Mon Sep 17 00:00:00 2001 | 1 | From 5962a5ee2885f67a396f7e8955ac1bbd7f15d4aa Mon Sep 17 00:00:00 2001 |
| 2 | From: Nathan Rossi <nathan@nathanrossi.com> | 2 | From: Nathan Rossi <nathan@nathanrossi.com> |
| 3 | Date: Mon, 14 Dec 2020 13:39:02 +1000 | 3 | Date: Mon, 14 Dec 2020 13:39:02 +1000 |
| 4 | Subject: [PATCH] gen-pkgconfig.in: Do not include LDFLAGS in generated pc | 4 | Subject: [PATCH] gen-pkgconfig.in: Do not include LDFLAGS in generated pc |
| @@ -10,13 +10,12 @@ includes build host specific paths and options (e.g. uninative and | |||
| 10 | 10 | ||
| 11 | Upstream-Status: Inappropriate [OE Specific] | 11 | Upstream-Status: Inappropriate [OE Specific] |
| 12 | Signed-off-by: Nathan Rossi <nathan@nathanrossi.com> | 12 | Signed-off-by: Nathan Rossi <nathan@nathanrossi.com> |
| 13 | |||
| 14 | --- | 13 | --- |
| 15 | misc/gen-pkgconfig.in | 2 +- | 14 | misc/gen-pkgconfig.in | 2 +- |
| 16 | 1 file changed, 1 insertion(+), 1 deletion(-) | 15 | 1 file changed, 1 insertion(+), 1 deletion(-) |
| 17 | 16 | ||
| 18 | diff --git a/misc/gen-pkgconfig.in b/misc/gen-pkgconfig.in | 17 | diff --git a/misc/gen-pkgconfig.in b/misc/gen-pkgconfig.in |
| 19 | index a45dd54f..85273054 100644 | 18 | index 89a5cd4a..07d94d17 100644 |
| 20 | --- a/misc/gen-pkgconfig.in | 19 | --- a/misc/gen-pkgconfig.in |
| 21 | +++ b/misc/gen-pkgconfig.in | 20 | +++ b/misc/gen-pkgconfig.in |
| 22 | @@ -83,7 +83,7 @@ if [ "$includedir" != "/usr/include" ]; then | 21 | @@ -83,7 +83,7 @@ if [ "$includedir" != "/usr/include" ]; then |
diff --git a/meta/recipes-core/ncurses/files/CVE-2023-45918.patch b/meta/recipes-core/ncurses/files/CVE-2023-45918.patch deleted file mode 100644 index fbdae49a61..0000000000 --- a/meta/recipes-core/ncurses/files/CVE-2023-45918.patch +++ /dev/null | |||
| @@ -1,180 +0,0 @@ | |||
| 1 | From bcf02d3242f1c7d57224a95f7903fcf4b5e7695d Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Thomas E. Dickey <dickey@invisible-island.net> | ||
| 3 | Date: Fri, 16 Jun 2023 02:54:29 +0530 | ||
| 4 | Subject: [PATCH] Fix CVE-2023-45918 | ||
| 5 | |||
| 6 | CVE: CVE-2023-45918 | ||
| 7 | |||
| 8 | Upstream-Status: Backport [https://ncurses.scripts.mit.edu/?p=ncurses.git;a=commit;h=bcf02d3242f1c7d57224a95f7903fcf4b5e7695d] | ||
| 9 | |||
| 10 | Signed-off-by: Soumya Sambu <soumya.sambu@windriver.com> | ||
| 11 | --- | ||
| 12 | ncurses/tinfo/comp_error.c | 15 ++++++--- | ||
| 13 | ncurses/tinfo/read_entry.c | 65 ++++++++++++++++++++++++++------------ | ||
| 14 | 2 files changed, 56 insertions(+), 24 deletions(-) | ||
| 15 | |||
| 16 | diff --git a/ncurses/tinfo/comp_error.c b/ncurses/tinfo/comp_error.c | ||
| 17 | index 48f48784..ee518e28 100644 | ||
| 18 | --- a/ncurses/tinfo/comp_error.c | ||
| 19 | +++ b/ncurses/tinfo/comp_error.c | ||
| 20 | @@ -60,8 +60,15 @@ _nc_get_source(void) | ||
| 21 | NCURSES_EXPORT(void) | ||
| 22 | _nc_set_source(const char *const name) | ||
| 23 | { | ||
| 24 | - FreeIfNeeded(SourceName); | ||
| 25 | - SourceName = strdup(name); | ||
| 26 | + if (name == NULL) { | ||
| 27 | + free(SourceName); | ||
| 28 | + SourceName = NULL; | ||
| 29 | + } else if (SourceName == NULL) { | ||
| 30 | + SourceName = strdup(name); | ||
| 31 | + } else if (strcmp(name, SourceName)) { | ||
| 32 | + free(SourceName); | ||
| 33 | + SourceName = strdup(name); | ||
| 34 | + } | ||
| 35 | } | ||
| 36 | |||
| 37 | NCURSES_EXPORT(void) | ||
| 38 | @@ -95,9 +102,9 @@ static NCURSES_INLINE void | ||
| 39 | where_is_problem(void) | ||
| 40 | { | ||
| 41 | fprintf(stderr, "\"%s\"", SourceName ? SourceName : "?"); | ||
| 42 | - if (_nc_curr_line >= 0) | ||
| 43 | + if (_nc_curr_line > 0) | ||
| 44 | fprintf(stderr, ", line %d", _nc_curr_line); | ||
| 45 | - if (_nc_curr_col >= 0) | ||
| 46 | + if (_nc_curr_col > 0) | ||
| 47 | fprintf(stderr, ", col %d", _nc_curr_col); | ||
| 48 | if (TermType != 0 && TermType[0] != '\0') | ||
| 49 | fprintf(stderr, ", terminal '%s'", TermType); | ||
| 50 | diff --git a/ncurses/tinfo/read_entry.c b/ncurses/tinfo/read_entry.c | ||
| 51 | index 341337d2..b0c3ad26 100644 | ||
| 52 | --- a/ncurses/tinfo/read_entry.c | ||
| 53 | +++ b/ncurses/tinfo/read_entry.c | ||
| 54 | @@ -138,12 +138,13 @@ convert_16bits(char *buf, NCURSES_INT2 *Numbers, int count) | ||
| 55 | } | ||
| 56 | #endif | ||
| 57 | |||
| 58 | -static void | ||
| 59 | -convert_strings(char *buf, char **Strings, int count, int size, char *table) | ||
| 60 | +static bool | ||
| 61 | +convert_strings(char *buf, char **Strings, int count, int size, | ||
| 62 | + char *table, bool always) | ||
| 63 | { | ||
| 64 | int i; | ||
| 65 | char *p; | ||
| 66 | - bool corrupt = FALSE; | ||
| 67 | + bool success = TRUE; | ||
| 68 | |||
| 69 | for (i = 0; i < count; i++) { | ||
| 70 | if (IS_NEG1(buf + 2 * i)) { | ||
| 71 | @@ -159,13 +160,10 @@ convert_strings(char *buf, char **Strings, int count, int size, char *table) | ||
| 72 | TR(TRACE_DATABASE, ("Strings[%d] = %s", i, | ||
| 73 | _nc_visbuf(Strings[i]))); | ||
| 74 | } else { | ||
| 75 | - if (!corrupt) { | ||
| 76 | - corrupt = TRUE; | ||
| 77 | - TR(TRACE_DATABASE, | ||
| 78 | - ("ignore out-of-range index %d to Strings[]", nn)); | ||
| 79 | - _nc_warning("corrupt data found in convert_strings"); | ||
| 80 | - } | ||
| 81 | - Strings[i] = ABSENT_STRING; | ||
| 82 | + TR(TRACE_DATABASE, | ||
| 83 | + ("found out-of-range index %d to Strings[%d]", nn, i)); | ||
| 84 | + success = FALSE; | ||
| 85 | + break; | ||
| 86 | } | ||
| 87 | } | ||
| 88 | |||
| 89 | @@ -175,10 +173,25 @@ convert_strings(char *buf, char **Strings, int count, int size, char *table) | ||
| 90 | if (*p == '\0') | ||
| 91 | break; | ||
| 92 | /* if there is no NUL, ignore the string */ | ||
| 93 | - if (p >= table + size) | ||
| 94 | + if (p >= table + size) { | ||
| 95 | Strings[i] = ABSENT_STRING; | ||
| 96 | + } else if (p == Strings[i] && always) { | ||
| 97 | + TR(TRACE_DATABASE, | ||
| 98 | + ("found empty but required Strings[%d]", i)); | ||
| 99 | + success = FALSE; | ||
| 100 | + break; | ||
| 101 | + } | ||
| 102 | + } else if (always) { /* names are always needed */ | ||
| 103 | + TR(TRACE_DATABASE, | ||
| 104 | + ("found invalid but required Strings[%d]", i)); | ||
| 105 | + success = FALSE; | ||
| 106 | + break; | ||
| 107 | } | ||
| 108 | } | ||
| 109 | + if (!success) { | ||
| 110 | + _nc_warning("corrupt data found in convert_strings"); | ||
| 111 | + } | ||
| 112 | + return success; | ||
| 113 | } | ||
| 114 | |||
| 115 | static int | ||
| 116 | @@ -382,7 +395,10 @@ _nc_read_termtype(TERMTYPE2 *ptr, char *buffer, int limit) | ||
| 117 | if (Read(string_table, (unsigned) str_size) != str_size) { | ||
| 118 | returnDB(TGETENT_NO); | ||
| 119 | } | ||
| 120 | - convert_strings(buf, ptr->Strings, str_count, str_size, string_table); | ||
| 121 | + if (!convert_strings(buf, ptr->Strings, str_count, str_size, | ||
| 122 | + string_table, FALSE)) { | ||
| 123 | + returnDB(TGETENT_NO); | ||
| 124 | + } | ||
| 125 | } | ||
| 126 | #if NCURSES_XNAMES | ||
| 127 | |||
| 128 | @@ -483,8 +499,10 @@ _nc_read_termtype(TERMTYPE2 *ptr, char *buffer, int limit) | ||
| 129 | ("Before computing extended-string capabilities " | ||
| 130 | "str_count=%d, ext_str_count=%d", | ||
| 131 | str_count, ext_str_count)); | ||
| 132 | - convert_strings(buf, ptr->Strings + str_count, ext_str_count, | ||
| 133 | - ext_str_limit, ptr->ext_str_table); | ||
| 134 | + if (!convert_strings(buf, ptr->Strings + str_count, ext_str_count, | ||
| 135 | + ext_str_limit, ptr->ext_str_table, FALSE)) { | ||
| 136 | + returnDB(TGETENT_NO); | ||
| 137 | + } | ||
| 138 | for (i = ext_str_count - 1; i >= 0; i--) { | ||
| 139 | TR(TRACE_DATABASE, ("MOVE from [%d:%d] %s", | ||
| 140 | i, i + str_count, | ||
| 141 | @@ -516,10 +534,13 @@ _nc_read_termtype(TERMTYPE2 *ptr, char *buffer, int limit) | ||
| 142 | TR(TRACE_DATABASE, | ||
| 143 | ("ext_NAMES starting @%d in extended_strings, first = %s", | ||
| 144 | base, _nc_visbuf(ptr->ext_str_table + base))); | ||
| 145 | - convert_strings(buf + (2 * ext_str_count), | ||
| 146 | - ptr->ext_Names, | ||
| 147 | - (int) need, | ||
| 148 | - ext_str_limit, ptr->ext_str_table + base); | ||
| 149 | + if (!convert_strings(buf + (2 * ext_str_count), | ||
| 150 | + ptr->ext_Names, | ||
| 151 | + (int) need, | ||
| 152 | + ext_str_limit, ptr->ext_str_table + base, | ||
| 153 | + TRUE)) { | ||
| 154 | + returnDB(TGETENT_NO); | ||
| 155 | + } | ||
| 156 | } | ||
| 157 | |||
| 158 | TR(TRACE_DATABASE, | ||
| 159 | @@ -572,13 +593,17 @@ _nc_read_file_entry(const char *const filename, TERMTYPE2 *ptr) | ||
| 160 | int limit; | ||
| 161 | char buffer[MAX_ENTRY_SIZE + 1]; | ||
| 162 | |||
| 163 | - if ((limit = (int) fread(buffer, sizeof(char), sizeof(buffer), fp)) | ||
| 164 | - > 0) { | ||
| 165 | + limit = (int) fread(buffer, sizeof(char), sizeof(buffer), fp); | ||
| 166 | + if (limit > 0) { | ||
| 167 | + const char *old_source = _nc_get_source(); | ||
| 168 | |||
| 169 | TR(TRACE_DATABASE, ("read terminfo %s", filename)); | ||
| 170 | + if (old_source == NULL) | ||
| 171 | + _nc_set_source(filename); | ||
| 172 | if ((code = _nc_read_termtype(ptr, buffer, limit)) == TGETENT_NO) { | ||
| 173 | _nc_free_termtype2(ptr); | ||
| 174 | } | ||
| 175 | + _nc_set_source(old_source); | ||
| 176 | } else { | ||
| 177 | code = TGETENT_NO; | ||
| 178 | } | ||
| 179 | -- | ||
| 180 | 2.40.0 | ||
diff --git a/meta/recipes-core/ncurses/files/CVE-2023-50495.patch b/meta/recipes-core/ncurses/files/CVE-2023-50495.patch deleted file mode 100644 index 7d90ddd30f..0000000000 --- a/meta/recipes-core/ncurses/files/CVE-2023-50495.patch +++ /dev/null | |||
| @@ -1,301 +0,0 @@ | |||
| 1 | From 7daae3f2139a678fe0ae0b42fcf8d807cbff485c Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Mingli Yu <mingli.yu@windriver.com> | ||
| 3 | Date: Sun, 4 Feb 2024 13:42:38 +0800 | ||
| 4 | Subject: [PATCH] parse_entry.c: check return value of _nc_save_str | ||
| 5 | |||
| 6 | * check return value of _nc_save_str(), in special case for tic where | ||
| 7 | extended capabilities are processed but the terminal description was | ||
| 8 | not initialized (report by Ziqiao Kong). | ||
| 9 | |||
| 10 | * regenerate llib-* files. | ||
| 11 | |||
| 12 | CVE: CVE-2023-50495 | ||
| 13 | |||
| 14 | Upstream-Status: Backport [http://ncurses.scripts.mit.edu/?p=ncurses.git;a=commitdiff;h=7723dd6799ab10b32047ec73b14df9f107bafe99] | ||
| 15 | |||
| 16 | Signed-off-by: Mingli Yu <mingli.yu@windriver.com> | ||
| 17 | --- | ||
| 18 | ncurses/llib-lncurses | 15 +++++++++++++++ | ||
| 19 | ncurses/llib-lncursest | 15 +++++++++++++++ | ||
| 20 | ncurses/llib-lncursestw | 15 +++++++++++++++ | ||
| 21 | ncurses/llib-lncursesw | 15 +++++++++++++++ | ||
| 22 | ncurses/llib-ltinfo | 15 +++++++++++++++ | ||
| 23 | ncurses/llib-ltinfot | 15 +++++++++++++++ | ||
| 24 | ncurses/llib-ltinfotw | 15 +++++++++++++++ | ||
| 25 | ncurses/llib-ltinfow | 15 +++++++++++++++ | ||
| 26 | ncurses/tinfo/parse_entry.c | 23 ++++++++++++++++------- | ||
| 27 | 9 files changed, 136 insertions(+), 7 deletions(-) | ||
| 28 | |||
| 29 | diff --git a/ncurses/llib-lncurses b/ncurses/llib-lncurses | ||
| 30 | index 211cf3b7..e4190aa2 100644 | ||
| 31 | --- a/ncurses/llib-lncurses | ||
| 32 | +++ b/ncurses/llib-lncurses | ||
| 33 | @@ -3656,6 +3656,21 @@ char *tiparm( | ||
| 34 | ...) | ||
| 35 | { return(*(char **)0); } | ||
| 36 | |||
| 37 | +#undef tiparm_s | ||
| 38 | +char *tiparm_s( | ||
| 39 | + int num_expected, | ||
| 40 | + int tparm_type, | ||
| 41 | + const char *string, | ||
| 42 | + ...) | ||
| 43 | + { return(*(char **)0); } | ||
| 44 | + | ||
| 45 | +#undef tiscan_s | ||
| 46 | +int tiscan_s( | ||
| 47 | + int *num_expected, | ||
| 48 | + int *tparm_type, | ||
| 49 | + const char *string) | ||
| 50 | + { return(*(int *)0); } | ||
| 51 | + | ||
| 52 | #undef _nc_tiparm | ||
| 53 | char *_nc_tiparm( | ||
| 54 | int expected, | ||
| 55 | diff --git a/ncurses/llib-lncursest b/ncurses/llib-lncursest | ||
| 56 | index 1b09d676..e07abba6 100644 | ||
| 57 | --- a/ncurses/llib-lncursest | ||
| 58 | +++ b/ncurses/llib-lncursest | ||
| 59 | @@ -3741,6 +3741,21 @@ char *tiparm( | ||
| 60 | ...) | ||
| 61 | { return(*(char **)0); } | ||
| 62 | |||
| 63 | +#undef tiparm_s | ||
| 64 | +char *tiparm_s( | ||
| 65 | + int num_expected, | ||
| 66 | + int tparm_type, | ||
| 67 | + const char *string, | ||
| 68 | + ...) | ||
| 69 | + { return(*(char **)0); } | ||
| 70 | + | ||
| 71 | +#undef tiscan_s | ||
| 72 | +int tiscan_s( | ||
| 73 | + int *num_expected, | ||
| 74 | + int *tparm_type, | ||
| 75 | + const char *string) | ||
| 76 | + { return(*(int *)0); } | ||
| 77 | + | ||
| 78 | #undef _nc_tiparm | ||
| 79 | char *_nc_tiparm( | ||
| 80 | int expected, | ||
| 81 | diff --git a/ncurses/llib-lncursestw b/ncurses/llib-lncursestw | ||
| 82 | index 4576e0fc..747c6be8 100644 | ||
| 83 | --- a/ncurses/llib-lncursestw | ||
| 84 | +++ b/ncurses/llib-lncursestw | ||
| 85 | @@ -4702,6 +4702,21 @@ char *tiparm( | ||
| 86 | ...) | ||
| 87 | { return(*(char **)0); } | ||
| 88 | |||
| 89 | +#undef tiparm_s | ||
| 90 | +char *tiparm_s( | ||
| 91 | + int num_expected, | ||
| 92 | + int tparm_type, | ||
| 93 | + const char *string, | ||
| 94 | + ...) | ||
| 95 | + { return(*(char **)0); } | ||
| 96 | + | ||
| 97 | +#undef tiscan_s | ||
| 98 | +int tiscan_s( | ||
| 99 | + int *num_expected, | ||
| 100 | + int *tparm_type, | ||
| 101 | + const char *string) | ||
| 102 | + { return(*(int *)0); } | ||
| 103 | + | ||
| 104 | #undef _nc_tiparm | ||
| 105 | char *_nc_tiparm( | ||
| 106 | int expected, | ||
| 107 | diff --git a/ncurses/llib-lncursesw b/ncurses/llib-lncursesw | ||
| 108 | index 127350d2..862305d9 100644 | ||
| 109 | --- a/ncurses/llib-lncursesw | ||
| 110 | +++ b/ncurses/llib-lncursesw | ||
| 111 | @@ -4617,6 +4617,21 @@ char *tiparm( | ||
| 112 | ...) | ||
| 113 | { return(*(char **)0); } | ||
| 114 | |||
| 115 | +#undef tiparm_s | ||
| 116 | +char *tiparm_s( | ||
| 117 | + int num_expected, | ||
| 118 | + int tparm_type, | ||
| 119 | + const char *string, | ||
| 120 | + ...) | ||
| 121 | + { return(*(char **)0); } | ||
| 122 | + | ||
| 123 | +#undef tiscan_s | ||
| 124 | +int tiscan_s( | ||
| 125 | + int *num_expected, | ||
| 126 | + int *tparm_type, | ||
| 127 | + const char *string) | ||
| 128 | + { return(*(int *)0); } | ||
| 129 | + | ||
| 130 | #undef _nc_tiparm | ||
| 131 | char *_nc_tiparm( | ||
| 132 | int expected, | ||
| 133 | diff --git a/ncurses/llib-ltinfo b/ncurses/llib-ltinfo | ||
| 134 | index a5cd7cd3..31e5e9a6 100644 | ||
| 135 | --- a/ncurses/llib-ltinfo | ||
| 136 | +++ b/ncurses/llib-ltinfo | ||
| 137 | @@ -927,6 +927,21 @@ char *tiparm( | ||
| 138 | ...) | ||
| 139 | { return(*(char **)0); } | ||
| 140 | |||
| 141 | +#undef tiparm_s | ||
| 142 | +char *tiparm_s( | ||
| 143 | + int num_expected, | ||
| 144 | + int tparm_type, | ||
| 145 | + const char *string, | ||
| 146 | + ...) | ||
| 147 | + { return(*(char **)0); } | ||
| 148 | + | ||
| 149 | +#undef tiscan_s | ||
| 150 | +int tiscan_s( | ||
| 151 | + int *num_expected, | ||
| 152 | + int *tparm_type, | ||
| 153 | + const char *string) | ||
| 154 | + { return(*(int *)0); } | ||
| 155 | + | ||
| 156 | #undef _nc_tiparm | ||
| 157 | char *_nc_tiparm( | ||
| 158 | int expected, | ||
| 159 | diff --git a/ncurses/llib-ltinfot b/ncurses/llib-ltinfot | ||
| 160 | index bd3de812..48e5c25a 100644 | ||
| 161 | --- a/ncurses/llib-ltinfot | ||
| 162 | +++ b/ncurses/llib-ltinfot | ||
| 163 | @@ -1003,6 +1003,21 @@ char *tiparm( | ||
| 164 | ...) | ||
| 165 | { return(*(char **)0); } | ||
| 166 | |||
| 167 | +#undef tiparm_s | ||
| 168 | +char *tiparm_s( | ||
| 169 | + int num_expected, | ||
| 170 | + int tparm_type, | ||
| 171 | + const char *string, | ||
| 172 | + ...) | ||
| 173 | + { return(*(char **)0); } | ||
| 174 | + | ||
| 175 | +#undef tiscan_s | ||
| 176 | +int tiscan_s( | ||
| 177 | + int *num_expected, | ||
| 178 | + int *tparm_type, | ||
| 179 | + const char *string) | ||
| 180 | + { return(*(int *)0); } | ||
| 181 | + | ||
| 182 | #undef _nc_tiparm | ||
| 183 | char *_nc_tiparm( | ||
| 184 | int expected, | ||
| 185 | diff --git a/ncurses/llib-ltinfotw b/ncurses/llib-ltinfotw | ||
| 186 | index 4d35a1e1..64dfdfa5 100644 | ||
| 187 | --- a/ncurses/llib-ltinfotw | ||
| 188 | +++ b/ncurses/llib-ltinfotw | ||
| 189 | @@ -1025,6 +1025,21 @@ char *tiparm( | ||
| 190 | ...) | ||
| 191 | { return(*(char **)0); } | ||
| 192 | |||
| 193 | +#undef tiparm_s | ||
| 194 | +char *tiparm_s( | ||
| 195 | + int num_expected, | ||
| 196 | + int tparm_type, | ||
| 197 | + const char *string, | ||
| 198 | + ...) | ||
| 199 | + { return(*(char **)0); } | ||
| 200 | + | ||
| 201 | +#undef tiscan_s | ||
| 202 | +int tiscan_s( | ||
| 203 | + int *num_expected, | ||
| 204 | + int *tparm_type, | ||
| 205 | + const char *string) | ||
| 206 | + { return(*(int *)0); } | ||
| 207 | + | ||
| 208 | #undef _nc_tiparm | ||
| 209 | char *_nc_tiparm( | ||
| 210 | int expected, | ||
| 211 | diff --git a/ncurses/llib-ltinfow b/ncurses/llib-ltinfow | ||
| 212 | index db846764..7e17a35f 100644 | ||
| 213 | --- a/ncurses/llib-ltinfow | ||
| 214 | +++ b/ncurses/llib-ltinfow | ||
| 215 | @@ -949,6 +949,21 @@ char *tiparm( | ||
| 216 | ...) | ||
| 217 | { return(*(char **)0); } | ||
| 218 | |||
| 219 | +#undef tiparm_s | ||
| 220 | +char *tiparm_s( | ||
| 221 | + int num_expected, | ||
| 222 | + int tparm_type, | ||
| 223 | + const char *string, | ||
| 224 | + ...) | ||
| 225 | + { return(*(char **)0); } | ||
| 226 | + | ||
| 227 | +#undef tiscan_s | ||
| 228 | +int tiscan_s( | ||
| 229 | + int *num_expected, | ||
| 230 | + int *tparm_type, | ||
| 231 | + const char *string) | ||
| 232 | + { return(*(int *)0); } | ||
| 233 | + | ||
| 234 | #undef _nc_tiparm | ||
| 235 | char *_nc_tiparm( | ||
| 236 | int expected, | ||
| 237 | diff --git a/ncurses/tinfo/parse_entry.c b/ncurses/tinfo/parse_entry.c | ||
| 238 | index 14bcb67e..0a0b5637 100644 | ||
| 239 | --- a/ncurses/tinfo/parse_entry.c | ||
| 240 | +++ b/ncurses/tinfo/parse_entry.c | ||
| 241 | @@ -110,7 +110,7 @@ _nc_extend_names(ENTRY * entryp, const char *name, int token_type) | ||
| 242 | /* Well, we are given a cancel for a name that we don't recognize */ | ||
| 243 | return _nc_extend_names(entryp, name, STRING); | ||
| 244 | default: | ||
| 245 | - return 0; | ||
| 246 | + return NULL; | ||
| 247 | } | ||
| 248 | |||
| 249 | /* Adjust the 'offset' (insertion-point) to keep the lists of extended | ||
| 250 | @@ -142,6 +142,11 @@ _nc_extend_names(ENTRY * entryp, const char *name, int token_type) | ||
| 251 | for (last = (unsigned) (max - 1); last > tindex; last--) | ||
| 252 | |||
| 253 | if (!found) { | ||
| 254 | + char *saved; | ||
| 255 | + | ||
| 256 | + if ((saved = _nc_save_str(name)) == NULL) | ||
| 257 | + return NULL; | ||
| 258 | + | ||
| 259 | switch (token_type) { | ||
| 260 | case BOOLEAN: | ||
| 261 | tp->ext_Booleans++; | ||
| 262 | @@ -169,7 +174,7 @@ _nc_extend_names(ENTRY * entryp, const char *name, int token_type) | ||
| 263 | TYPE_REALLOC(char *, actual, tp->ext_Names); | ||
| 264 | while (--actual > offset) | ||
| 265 | tp->ext_Names[actual] = tp->ext_Names[actual - 1]; | ||
| 266 | - tp->ext_Names[offset] = _nc_save_str(name); | ||
| 267 | + tp->ext_Names[offset] = saved; | ||
| 268 | } | ||
| 269 | |||
| 270 | temp.nte_name = tp->ext_Names[offset]; | ||
| 271 | @@ -364,6 +369,8 @@ _nc_parse_entry(ENTRY * entryp, int literal, bool silent) | ||
| 272 | bool is_use = (strcmp(_nc_curr_token.tk_name, "use") == 0); | ||
| 273 | bool is_tc = !is_use && (strcmp(_nc_curr_token.tk_name, "tc") == 0); | ||
| 274 | if (is_use || is_tc) { | ||
| 275 | + char *saved; | ||
| 276 | + | ||
| 277 | if (!VALID_STRING(_nc_curr_token.tk_valstring) | ||
| 278 | || _nc_curr_token.tk_valstring[0] == '\0') { | ||
| 279 | _nc_warning("missing name for use-clause"); | ||
| 280 | @@ -377,11 +384,13 @@ _nc_parse_entry(ENTRY * entryp, int literal, bool silent) | ||
| 281 | _nc_curr_token.tk_valstring); | ||
| 282 | continue; | ||
| 283 | } | ||
| 284 | - entryp->uses[entryp->nuses].name = _nc_save_str(_nc_curr_token.tk_valstring); | ||
| 285 | - entryp->uses[entryp->nuses].line = _nc_curr_line; | ||
| 286 | - entryp->nuses++; | ||
| 287 | - if (entryp->nuses > 1 && is_tc) { | ||
| 288 | - BAD_TC_USAGE | ||
| 289 | + if ((saved = _nc_save_str(_nc_curr_token.tk_valstring)) != NULL) { | ||
| 290 | + entryp->uses[entryp->nuses].name = saved; | ||
| 291 | + entryp->uses[entryp->nuses].line = _nc_curr_line; | ||
| 292 | + entryp->nuses++; | ||
| 293 | + if (entryp->nuses > 1 && is_tc) { | ||
| 294 | + BAD_TC_USAGE | ||
| 295 | + } | ||
| 296 | } | ||
| 297 | } else { | ||
| 298 | /* normal token lookup */ | ||
| 299 | -- | ||
| 300 | 2.25.1 | ||
| 301 | |||
diff --git a/meta/recipes-core/ncurses/files/exit_prototype.patch b/meta/recipes-core/ncurses/files/exit_prototype.patch index fd961512e0..299852d2c0 100644 --- a/meta/recipes-core/ncurses/files/exit_prototype.patch +++ b/meta/recipes-core/ncurses/files/exit_prototype.patch | |||
| @@ -1,28 +1,27 @@ | |||
| 1 | From 4a769a441d7e57a23017c3037cde3e53fb9f35fe Mon Sep 17 00:00:00 2001 | 1 | From af798dceafec8a9ea3f83fc250d784511ca0a29c Mon Sep 17 00:00:00 2001 |
| 2 | From: Khem Raj <raj.khem@gmail.com> | 2 | From: Khem Raj <raj.khem@gmail.com> |
| 3 | Date: Tue, 30 Aug 2022 15:58:32 -0700 | 3 | Date: Tue, 30 Aug 2022 15:58:32 -0700 |
| 4 | Subject: [PATCH] Add needed headers for including mbstate_t and exit() | 4 | Subject: [PATCH] Add needed headers for including mbstate_t and exit() |
| 5 | 5 | ||
| 6 | Upstream-Status: Inappropriate [Reconfigure will solve it] | 6 | Upstream-Status: Inappropriate [Reconfigure will solve it] |
| 7 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | 7 | Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| 8 | |||
| 9 | --- | 8 | --- |
| 10 | configure | 2 ++ | 9 | configure | 2 ++ |
| 11 | 1 file changed, 2 insertions(+) | 10 | 1 file changed, 2 insertions(+) |
| 12 | 11 | ||
| 13 | diff --git a/configure b/configure | 12 | diff --git a/configure b/configure |
| 14 | index f377f551..163f8899 100755 | 13 | index 005d44e2..72fa6c23 100755 |
| 15 | --- a/configure | 14 | --- a/configure |
| 16 | +++ b/configure | 15 | +++ b/configure |
| 17 | @@ -3423,6 +3423,7 @@ rm -f "conftest.$ac_objext" "conftest.$ac_ext" | 16 | @@ -3462,6 +3462,7 @@ rm -f "conftest.$ac_objext" "conftest.$ac_ext" |
| 18 | cat >"conftest.$ac_ext" <<_ACEOF | 17 | cat >"conftest.$ac_ext" <<_ACEOF |
| 19 | #line 3424 "configure" | 18 | #line 3463 "configure" |
| 20 | #include "confdefs.h" | 19 | #include "confdefs.h" |
| 21 | +#include <stdlib.h> | 20 | +#include <stdlib.h> |
| 22 | $ac_declaration | 21 | $ac_declaration |
| 23 | int | 22 | int |
| 24 | main (void) | 23 | main (void) |
| 25 | @@ -13111,6 +13112,7 @@ cat >"conftest.$ac_ext" <<_ACEOF | 24 | @@ -13533,6 +13534,7 @@ cat >"conftest.$ac_ext" <<_ACEOF |
| 26 | #include <stdlib.h> | 25 | #include <stdlib.h> |
| 27 | #include <stdarg.h> | 26 | #include <stdarg.h> |
| 28 | #include <stdio.h> | 27 | #include <stdio.h> |
diff --git a/meta/recipes-core/ncurses/ncurses.inc b/meta/recipes-core/ncurses/ncurses.inc index 3b72f3efdd..2a3fd4f2c5 100644 --- a/meta/recipes-core/ncurses/ncurses.inc +++ b/meta/recipes-core/ncurses/ncurses.inc | |||
| @@ -2,7 +2,7 @@ SUMMARY = "The New Curses library" | |||
| 2 | DESCRIPTION = "SVr4 and XSI-Curses compatible curses library and terminfo tools including tic, infocmp, captoinfo. Supports color, multiple highlights, forms-drawing characters, and automatic recognition of keypad and function-key sequences. Extensions include resizable windows and mouse support on both xterm and Linux console using the gpm library." | 2 | DESCRIPTION = "SVr4 and XSI-Curses compatible curses library and terminfo tools including tic, infocmp, captoinfo. Supports color, multiple highlights, forms-drawing characters, and automatic recognition of keypad and function-key sequences. Extensions include resizable windows and mouse support on both xterm and Linux console using the gpm library." |
| 3 | HOMEPAGE = "http://www.gnu.org/software/ncurses/ncurses.html" | 3 | HOMEPAGE = "http://www.gnu.org/software/ncurses/ncurses.html" |
| 4 | LICENSE = "MIT" | 4 | LICENSE = "MIT" |
| 5 | LIC_FILES_CHKSUM = "file://COPYING;md5=c5a4600fdef86384c41ca33ecc70a4b8;endline=27" | 5 | LIC_FILES_CHKSUM = "file://COPYING;md5=6f291ee54551d9d8d992ecd623fe4bc7;endline=27" |
| 6 | SECTION = "libs" | 6 | SECTION = "libs" |
| 7 | DEPENDS = "ncurses-native" | 7 | DEPENDS = "ncurses-native" |
| 8 | DEPENDS:class-native = "" | 8 | DEPENDS:class-native = "" |
diff --git a/meta/recipes-core/ncurses/ncurses_6.4.bb b/meta/recipes-core/ncurses/ncurses_6.5.bb index 61558ecfa8..2e3ee337ea 100644 --- a/meta/recipes-core/ncurses/ncurses_6.4.bb +++ b/meta/recipes-core/ncurses/ncurses_6.5.bb | |||
| @@ -4,13 +4,9 @@ SRC_URI += "file://0001-tic-hang.patch \ | |||
| 4 | file://0002-configure-reproducible.patch \ | 4 | file://0002-configure-reproducible.patch \ |
| 5 | file://0003-gen-pkgconfig.in-Do-not-include-LDFLAGS-in-generated.patch \ | 5 | file://0003-gen-pkgconfig.in-Do-not-include-LDFLAGS-in-generated.patch \ |
| 6 | file://exit_prototype.patch \ | 6 | file://exit_prototype.patch \ |
| 7 | file://0001-Fix-CVE-2023-29491.patch \ | ||
| 8 | file://0001-Updating-reset-code-ncurses-6.4-patch-20231104.patch \ | ||
| 9 | file://CVE-2023-50495.patch \ | ||
| 10 | file://CVE-2023-45918.patch \ | ||
| 11 | " | 7 | " |
| 12 | # commit id corresponds to the revision in package version | 8 | # commit id corresponds to the revision in package version |
| 13 | SRCREV = "1003914e200fd622a27237abca155ce6bf2e6030" | 9 | SRCREV = "1c55d64d9d3e00399a21f04e9cac1e472ab5f70a" |
| 14 | S = "${WORKDIR}/git" | 10 | S = "${WORKDIR}/git" |
| 15 | EXTRA_OECONF += "--with-abi-version=5" | 11 | EXTRA_OECONF += "--with-abi-version=5" |
| 16 | UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+_\d+)$" | 12 | UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+_\d+)$" |
