diff options
| author | jc_gargma <jc_gargma@iserlohn-fortress.net> | 2023-06-18 22:41:33 -0700 | 
|---|---|---|
| committer | jc_gargma <jc_gargma@iserlohn-fortress.net> | 2023-06-18 22:41:33 -0700 | 
| commit | 42aeafcdfafbafb3f1b14db21a0b7a4bf38a8daa (patch) | |
| tree | 03134681a95498a520fddb0ff02eea72574ecd34 | |
| parent | Rebuild with hotfix. (diff) | |
| download | tmux-42aeafcdfafbafb3f1b14db21a0b7a4bf38a8daa.tar.xz | |
Rebuild with hotfixes.
| -rw-r--r-- | 0001-CVE-2022-47016.patch (renamed from CVE-2022-47016.patch) | 0 | ||||
| -rw-r--r-- | 0002-ncurses.patch | 759 | ||||
| -rw-r--r-- | PKGBUILD | 16 | 
3 files changed, 770 insertions, 5 deletions
diff --git a/CVE-2022-47016.patch b/0001-CVE-2022-47016.patch index 4560869..4560869 100644 --- a/CVE-2022-47016.patch +++ b/0001-CVE-2022-47016.patch diff --git a/0002-ncurses.patch b/0002-ncurses.patch new file mode 100644 index 0000000..9eb1014 --- /dev/null +++ b/0002-ncurses.patch @@ -0,0 +1,759 @@ +From 33b5788ef7534cf9b3492dda5fd15056042f3e1b Mon Sep 17 00:00:00 2001 +From: nicm <nicm> +Date: Tue, 25 Apr 2023 09:31:50 +0000 +Subject: [PATCH 1/3] Tidy tparm wrapper functions to have more obvious names + and check tparm return value. + +(cherry picked from commit 8f34504736cf3547992c4ba948c1e65f3813715c) +--- + tmux.h     |  26 ++++++------ + tty-term.c |  47 ++++++++++++++++----- + tty.c      | 118 ++++++++++++++++++++++++++--------------------------- + 3 files changed, 108 insertions(+), 83 deletions(-) + +diff --git a/tmux.h b/tmux.h +index 53084b8b..5a90352e 100644 +--- a/tmux.h ++++ b/tmux.h +@@ -2250,12 +2250,12 @@ void	tty_margin_off(struct tty *); + void	tty_cursor(struct tty *, u_int, u_int); + void	tty_clipboard_query(struct tty *); + void	tty_putcode(struct tty *, enum tty_code_code); +-void	tty_putcode1(struct tty *, enum tty_code_code, int); +-void	tty_putcode2(struct tty *, enum tty_code_code, int, int); +-void	tty_putcode3(struct tty *, enum tty_code_code, int, int, int); +-void	tty_putcode_ptr1(struct tty *, enum tty_code_code, const void *); +-void	tty_putcode_ptr2(struct tty *, enum tty_code_code, const void *, +-	    const void *); ++void	tty_putcode_i(struct tty *, enum tty_code_code, int); ++void	tty_putcode_ii(struct tty *, enum tty_code_code, int, int); ++void	tty_putcode_iii(struct tty *, enum tty_code_code, int, int, int); ++void	tty_putcode_s(struct tty *, enum tty_code_code, const char *); ++void	tty_putcode_ss(struct tty *, enum tty_code_code, const char *, ++	    const char *); + void	tty_puts(struct tty *, const char *); + void	tty_putc(struct tty *, u_char); + void	tty_putn(struct tty *, const void *, size_t, u_int); +@@ -2318,15 +2318,15 @@ int		 tty_term_read_list(const char *, int, char ***, u_int *, + void		 tty_term_free_list(char **, u_int); + int		 tty_term_has(struct tty_term *, enum tty_code_code); + const char	*tty_term_string(struct tty_term *, enum tty_code_code); +-const char	*tty_term_string1(struct tty_term *, enum tty_code_code, int); +-const char	*tty_term_string2(struct tty_term *, enum tty_code_code, int, ++const char	*tty_term_string_i(struct tty_term *, enum tty_code_code, int); ++const char	*tty_term_string_ii(struct tty_term *, enum tty_code_code, int, + 		     int); +-const char	*tty_term_string3(struct tty_term *, enum tty_code_code, int, ++const char	*tty_term_string_iii(struct tty_term *, enum tty_code_code, int, + 		     int, int); +-const char	*tty_term_ptr1(struct tty_term *, enum tty_code_code, +-		     const void *); +-const char	*tty_term_ptr2(struct tty_term *, enum tty_code_code, +-		     const void *, const void *); ++const char	*tty_term_string_s(struct tty_term *, enum tty_code_code, ++		     const char *); ++const char	*tty_term_string_ss(struct tty_term *, enum tty_code_code, ++		     const char *, const char *); + int		 tty_term_number(struct tty_term *, enum tty_code_code); + int		 tty_term_flag(struct tty_term *, enum tty_code_code); + const char	*tty_term_describe(struct tty_term *, enum tty_code_code); +diff --git a/tty-term.c b/tty-term.c +index fdf0c4fa..32dd849a 100644 +--- a/tty-term.c ++++ b/tty-term.c +@@ -760,35 +760,60 @@ tty_term_string(struct tty_term *term, enum tty_code_code code) + } +  + const char * +-tty_term_string1(struct tty_term *term, enum tty_code_code code, int a) ++tty_term_string_i(struct tty_term *term, enum tty_code_code code, int a) + { +-	return (tparm((char *) tty_term_string(term, code), a, 0, 0, 0, 0, 0, 0, 0, 0)); ++	const char	*x = tty_term_string(term, code), *s; ++ ++	s = tparm((char *)x, a); ++	if (s == NULL) ++		fatalx("could not expand %s", tty_term_codes[code].name); ++	return (s); + } +  + const char * +-tty_term_string2(struct tty_term *term, enum tty_code_code code, int a, int b) ++tty_term_string_ii(struct tty_term *term, enum tty_code_code code, int a, int b) + { +-	return (tparm((char *) tty_term_string(term, code), a, b, 0, 0, 0, 0, 0, 0, 0)); ++	const char	*x = tty_term_string(term, code), *s; ++ ++	s = tparm((char *)x, a, b); ++	if (s == NULL) ++		fatalx("could not expand %s", tty_term_codes[code].name); ++	return (s); + } +  + const char * +-tty_term_string3(struct tty_term *term, enum tty_code_code code, int a, int b, ++tty_term_string_iii(struct tty_term *term, enum tty_code_code code, int a, int b, +     int c) + { +-	return (tparm((char *) tty_term_string(term, code), a, b, c, 0, 0, 0, 0, 0, 0)); ++	const char	*x = tty_term_string(term, code), *s; ++ ++	s = tparm((char *)x, a, b, c); ++	if (s == NULL) ++		fatalx("could not expand %s", tty_term_codes[code].name); ++	return (s); + } +  + const char * +-tty_term_ptr1(struct tty_term *term, enum tty_code_code code, const void *a) ++tty_term_string_s(struct tty_term *term, enum tty_code_code code, const char *a) + { +-	return (tparm((char *) tty_term_string(term, code), (long)a, 0, 0, 0, 0, 0, 0, 0, 0)); ++	const char	*x = tty_term_string(term, code), *s; ++ ++	s = tparm((char *)x, (long)a); ++	if (s == NULL) ++		fatalx("could not expand %s", tty_term_codes[code].name); ++	return (s); + } +  + const char * +-tty_term_ptr2(struct tty_term *term, enum tty_code_code code, const void *a, +-    const void *b) ++tty_term_string_ss(struct tty_term *term, enum tty_code_code code, const char *a, ++    const char *b) + { +-	return (tparm((char *) tty_term_string(term, code), (long)a, (long)b, 0, 0, 0, 0, 0, 0, 0)); ++	const char	*x = tty_term_string(term, code), *s; ++ ++	s = tparm((char *)x, (long)a, (long)b); ++	if (s == NULL) ++		fatalx("could not expand %s", tty_term_codes[code].name); ++	return (s); + } +  + int +diff --git a/tty.c b/tty.c +index 49cf9795..a4d744d0 100644 +--- a/tty.c ++++ b/tty.c +@@ -399,7 +399,7 @@ tty_stop_tty(struct tty *tty) + 	if (tcsetattr(c->fd, TCSANOW, &tty->tio) == -1) + 		return; +  +-	tty_raw(tty, tty_term_string2(tty->term, TTYC_CSR, 0, ws.ws_row - 1)); ++	tty_raw(tty, tty_term_string_ii(tty->term, TTYC_CSR, 0, ws.ws_row - 1)); + 	if (tty_acs_needed(tty)) + 		tty_raw(tty, tty_term_string(tty->term, TTYC_RMACS)); + 	tty_raw(tty, tty_term_string(tty->term, TTYC_SGR0)); +@@ -409,7 +409,7 @@ tty_stop_tty(struct tty *tty) + 		if (tty_term_has(tty->term, TTYC_SE)) + 			tty_raw(tty, tty_term_string(tty->term, TTYC_SE)); + 		else if (tty_term_has(tty->term, TTYC_SS)) +-			tty_raw(tty, tty_term_string1(tty->term, TTYC_SS, 0)); ++			tty_raw(tty, tty_term_string_i(tty->term, TTYC_SS, 0)); + 	} + 	if (tty->mode & MODE_BRACKETPASTE) + 		tty_raw(tty, tty_term_string(tty->term, TTYC_DSBP)); +@@ -506,42 +506,42 @@ tty_putcode(struct tty *tty, enum tty_code_code code) + } +  + void +-tty_putcode1(struct tty *tty, enum tty_code_code code, int a) ++tty_putcode_i(struct tty *tty, enum tty_code_code code, int a) + { + 	if (a < 0) + 		return; +-	tty_puts(tty, tty_term_string1(tty->term, code, a)); ++	tty_puts(tty, tty_term_string_i(tty->term, code, a)); + } +  + void +-tty_putcode2(struct tty *tty, enum tty_code_code code, int a, int b) ++tty_putcode_ii(struct tty *tty, enum tty_code_code code, int a, int b) + { + 	if (a < 0 || b < 0) + 		return; +-	tty_puts(tty, tty_term_string2(tty->term, code, a, b)); ++	tty_puts(tty, tty_term_string_ii(tty->term, code, a, b)); + } +  + void +-tty_putcode3(struct tty *tty, enum tty_code_code code, int a, int b, int c) ++tty_putcode_iii(struct tty *tty, enum tty_code_code code, int a, int b, int c) + { + 	if (a < 0 || b < 0 || c < 0) + 		return; +-	tty_puts(tty, tty_term_string3(tty->term, code, a, b, c)); ++	tty_puts(tty, tty_term_string_iii(tty->term, code, a, b, c)); + } +  + void +-tty_putcode_ptr1(struct tty *tty, enum tty_code_code code, const void *a) ++tty_putcode_s(struct tty *tty, enum tty_code_code code, const char *a) + { + 	if (a != NULL) +-		tty_puts(tty, tty_term_ptr1(tty->term, code, a)); ++		tty_puts(tty, tty_term_string_s(tty->term, code, a)); + } +  + void +-tty_putcode_ptr2(struct tty *tty, enum tty_code_code code, const void *a, +-    const void *b) ++tty_putcode_ss(struct tty *tty, enum tty_code_code code, const char *a, ++    const char *b) + { + 	if (a != NULL && b != NULL) +-		tty_puts(tty, tty_term_ptr2(tty->term, code, a, b)); ++		tty_puts(tty, tty_term_string_ss(tty->term, code, a, b)); + } +  + static void +@@ -603,7 +603,7 @@ tty_putc(struct tty *tty, u_char ch) + 			 * it works on sensible terminals as well. + 			 */ + 			if (tty->term->flags & TERM_NOAM) +-				tty_putcode2(tty, TTYC_CUP, tty->cy, tty->cx); ++				tty_putcode_ii(tty, TTYC_CUP, tty->cy, tty->cx); + 		} else + 			tty->cx++; + 	} +@@ -682,7 +682,7 @@ tty_force_cursor_colour(struct tty *tty, int c) + 	else { + 		colour_split_rgb(c, &r, &g, &b); + 		xsnprintf(s, sizeof s, "rgb:%02hhx/%02hhx/%02hhx", r, g, b); +-		tty_putcode_ptr1(tty, TTYC_CS, s); ++		tty_putcode_s(tty, TTYC_CS, s); + 	} + 	tty->ccolour = c; + } +@@ -743,7 +743,7 @@ tty_update_cursor(struct tty *tty, int mode, struct screen *s) + 			if (tty_term_has(tty->term, TTYC_SE)) + 				tty_putcode(tty, TTYC_SE); + 			else +-				tty_putcode1(tty, TTYC_SS, 0); ++				tty_putcode_i(tty, TTYC_SS, 0); + 		} + 		if (cmode & (MODE_CURSOR_BLINKING|MODE_CURSOR_VERY_VISIBLE)) + 			tty_putcode(tty, TTYC_CVVIS); +@@ -751,27 +751,27 @@ tty_update_cursor(struct tty *tty, int mode, struct screen *s) + 	case SCREEN_CURSOR_BLOCK: + 		if (tty_term_has(tty->term, TTYC_SS)) { + 			if (cmode & MODE_CURSOR_BLINKING) +-				tty_putcode1(tty, TTYC_SS, 1); ++				tty_putcode_i(tty, TTYC_SS, 1); + 			else +-				tty_putcode1(tty, TTYC_SS, 2); ++				tty_putcode_i(tty, TTYC_SS, 2); + 		} else if (cmode & MODE_CURSOR_BLINKING) + 			tty_putcode(tty, TTYC_CVVIS); + 		break; + 	case SCREEN_CURSOR_UNDERLINE: + 		if (tty_term_has(tty->term, TTYC_SS)) { + 			if (cmode & MODE_CURSOR_BLINKING) +-				tty_putcode1(tty, TTYC_SS, 3); ++				tty_putcode_i(tty, TTYC_SS, 3); + 			else +-				tty_putcode1(tty, TTYC_SS, 4); ++				tty_putcode_i(tty, TTYC_SS, 4); + 		} else if (cmode & MODE_CURSOR_BLINKING) + 			tty_putcode(tty, TTYC_CVVIS); + 		break; + 	case SCREEN_CURSOR_BAR: + 		if (tty_term_has(tty->term, TTYC_SS)) { + 			if (cmode & MODE_CURSOR_BLINKING) +-				tty_putcode1(tty, TTYC_SS, 5); ++				tty_putcode_i(tty, TTYC_SS, 5); + 			else +-				tty_putcode1(tty, TTYC_SS, 6); ++				tty_putcode_i(tty, TTYC_SS, 6); + 		} else if (cmode & MODE_CURSOR_BLINKING) + 			tty_putcode(tty, TTYC_CVVIS); + 		break; +@@ -833,7 +833,7 @@ tty_emulate_repeat(struct tty *tty, enum tty_code_code code, +     enum tty_code_code code1, u_int n) + { + 	if (tty_term_has(tty->term, code)) +-		tty_putcode1(tty, code, n); ++		tty_putcode_i(tty, code, n); + 	else { + 		while (n-- > 0) + 			tty_putcode(tty, code1); +@@ -1122,7 +1122,7 @@ tty_clear_line(struct tty *tty, const struct grid_cell *defaults, u_int py, + 		/* Section of line. Use ECH if possible. */ + 		if (tty_term_has(tty->term, TTYC_ECH)) { + 			tty_cursor(tty, px, py); +-			tty_putcode1(tty, TTYC_ECH, nx); ++			tty_putcode_i(tty, TTYC_ECH, nx); + 			return; + 		} + 	} +@@ -1263,7 +1263,7 @@ tty_clear_area(struct tty *tty, const struct grid_cell *defaults, u_int py, + 		    tty_term_has(tty->term, TTYC_INDN)) { + 			tty_region(tty, py, py + ny - 1); + 			tty_margin_off(tty); +-			tty_putcode1(tty, TTYC_INDN, ny); ++			tty_putcode_i(tty, TTYC_INDN, ny); + 			return; + 		} +  +@@ -1278,7 +1278,7 @@ tty_clear_area(struct tty *tty, const struct grid_cell *defaults, u_int py, + 		    tty_term_has(tty->term, TTYC_INDN)) { + 			tty_region(tty, py, py + ny - 1); + 			tty_margin(tty, px, px + nx - 1); +-			tty_putcode1(tty, TTYC_INDN, ny); ++			tty_putcode_i(tty, TTYC_INDN, ny); + 			return; + 		} + 	} +@@ -1579,7 +1579,7 @@ tty_sync_start(struct tty *tty) +  + 	if (tty_term_has(tty->term, TTYC_SYNC)) { + 		log_debug("%s sync start", tty->client->name); +-		tty_putcode1(tty, TTYC_SYNC, 1); ++		tty_putcode_i(tty, TTYC_SYNC, 1); + 	} + } +  +@@ -1594,7 +1594,7 @@ tty_sync_end(struct tty *tty) +  + 	if (tty_term_has(tty->term, TTYC_SYNC)) { +  		log_debug("%s sync end", tty->client->name); +-		tty_putcode1(tty, TTYC_SYNC, 2); ++		tty_putcode_i(tty, TTYC_SYNC, 2); + 	} + } +  +@@ -1793,7 +1793,7 @@ tty_cmd_reverseindex(struct tty *tty, const struct tty_ctx *ctx) + 	if (tty_term_has(tty->term, TTYC_RI)) + 		tty_putcode(tty, TTYC_RI); + 	else +-		tty_putcode1(tty, TTYC_RIN, 1); ++		tty_putcode_i(tty, TTYC_RIN, 1); + } +  + void +@@ -1872,7 +1872,7 @@ tty_cmd_scrollup(struct tty *tty, const struct tty_ctx *ctx) + 			tty_cursor(tty, 0, 0); + 		else + 			tty_cursor(tty, 0, tty->cy); +-		tty_putcode1(tty, TTYC_INDN, ctx->num); ++		tty_putcode_i(tty, TTYC_INDN, ctx->num); + 	} + } +  +@@ -1902,7 +1902,7 @@ tty_cmd_scrolldown(struct tty *tty, const struct tty_ctx *ctx) + 	tty_cursor_pane(tty, ctx, ctx->ocx, ctx->orupper); +  + 	if (tty_term_has(tty->term, TTYC_RIN)) +-		tty_putcode1(tty, TTYC_RIN, ctx->num); ++		tty_putcode_i(tty, TTYC_RIN, ctx->num); + 	else { + 		for (i = 0; i < ctx->num; i++) + 			tty_putcode(tty, TTYC_RI); +@@ -2101,7 +2101,7 @@ tty_set_selection(struct tty *tty, const char *buf, size_t len) +  + 	b64_ntop(buf, len, encoded, size); + 	tty->flags |= TTY_NOBLOCK; +-	tty_putcode_ptr2(tty, TTYC_MS, "", encoded); ++	tty_putcode_ss(tty, TTYC_MS, "", encoded); +  + 	free(encoded); + } +@@ -2246,7 +2246,7 @@ tty_region(struct tty *tty, u_int rupper, u_int rlower) + 			tty_cursor(tty, 0, tty->cy); + 	} +  +-	tty_putcode2(tty, TTYC_CSR, tty->rupper, tty->rlower); ++	tty_putcode_ii(tty, TTYC_CSR, tty->rupper, tty->rlower); + 	tty->cx = tty->cy = UINT_MAX; + } +  +@@ -2274,7 +2274,7 @@ tty_margin(struct tty *tty, u_int rleft, u_int rright) + 	if (tty->rleft == rleft && tty->rright == rright) + 		return; +  +-	tty_putcode2(tty, TTYC_CSR, tty->rupper, tty->rlower); ++	tty_putcode_ii(tty, TTYC_CSR, tty->rupper, tty->rlower); +  + 	tty->rleft = rleft; + 	tty->rright = rright; +@@ -2282,7 +2282,7 @@ tty_margin(struct tty *tty, u_int rleft, u_int rright) + 	if (rleft == 0 && rright == tty->sx - 1) + 		tty_putcode(tty, TTYC_CLMG); + 	else +-		tty_putcode2(tty, TTYC_CMG, rleft, rright); ++		tty_putcode_ii(tty, TTYC_CMG, rleft, rright); + 	tty->cx = tty->cy = UINT_MAX; + } +  +@@ -2392,7 +2392,7 @@ tty_cursor(struct tty *tty, u_int cx, u_int cy) + 		 * the cursor with CUB/CUF. + 		 */ + 		if ((u_int) abs(change) > cx && tty_term_has(term, TTYC_HPA)) { +-			tty_putcode1(tty, TTYC_HPA, cx); ++			tty_putcode_i(tty, TTYC_HPA, cx); + 			goto out; + 		} else if (change > 0 && + 		    tty_term_has(term, TTYC_CUB) && +@@ -2402,12 +2402,12 @@ tty_cursor(struct tty *tty, u_int cx, u_int cy) + 				tty_putcode(tty, TTYC_CUB1); + 				goto out; + 			} +-			tty_putcode1(tty, TTYC_CUB, change); ++			tty_putcode_i(tty, TTYC_CUB, change); + 			goto out; + 		} else if (change < 0 && + 		    tty_term_has(term, TTYC_CUF) && + 		    !tty_use_margin(tty)) { +-			tty_putcode1(tty, TTYC_CUF, -change); ++			tty_putcode_i(tty, TTYC_CUF, -change); + 			goto out; + 		} + 	} else if (cx == thisx) { +@@ -2440,21 +2440,21 @@ tty_cursor(struct tty *tty, u_int cx, u_int cy) + 		    (change < 0 && cy - change > tty->rlower) || + 		    (change > 0 && cy - change < tty->rupper)) { + 			    if (tty_term_has(term, TTYC_VPA)) { +-				    tty_putcode1(tty, TTYC_VPA, cy); ++				    tty_putcode_i(tty, TTYC_VPA, cy); + 				    goto out; + 			    } + 		} else if (change > 0 && tty_term_has(term, TTYC_CUU)) { +-			tty_putcode1(tty, TTYC_CUU, change); ++			tty_putcode_i(tty, TTYC_CUU, change); + 			goto out; + 		} else if (change < 0 && tty_term_has(term, TTYC_CUD)) { +-			tty_putcode1(tty, TTYC_CUD, -change); ++			tty_putcode_i(tty, TTYC_CUD, -change); + 			goto out; + 		} + 	} +  + absolute: + 	/* Absolute movement. */ +-	tty_putcode2(tty, TTYC_CUP, cy, cx); ++	tty_putcode_ii(tty, TTYC_CUP, cy, cx); +  + out: + 	tty->cx = cx; +@@ -2533,13 +2533,13 @@ tty_attributes(struct tty *tty, const struct grid_cell *gc, + 		    !tty_term_has(tty->term, TTYC_SMULX)) + 			tty_putcode(tty, TTYC_SMUL); + 		else if (changed & GRID_ATTR_UNDERSCORE_2) +-			tty_putcode1(tty, TTYC_SMULX, 2); ++			tty_putcode_i(tty, TTYC_SMULX, 2); + 		else if (changed & GRID_ATTR_UNDERSCORE_3) +-			tty_putcode1(tty, TTYC_SMULX, 3); ++			tty_putcode_i(tty, TTYC_SMULX, 3); + 		else if (changed & GRID_ATTR_UNDERSCORE_4) +-			tty_putcode1(tty, TTYC_SMULX, 4); ++			tty_putcode_i(tty, TTYC_SMULX, 4); + 		else if (changed & GRID_ATTR_UNDERSCORE_5) +-			tty_putcode1(tty, TTYC_SMULX, 5); ++			tty_putcode_i(tty, TTYC_SMULX, 5); + 	} + 	if (changed & GRID_ATTR_BLINK) + 		tty_putcode(tty, TTYC_BLINK); +@@ -2593,14 +2593,14 @@ tty_colours(struct tty *tty, const struct grid_cell *gc) + 				if (have_ax) + 					tty_puts(tty, "\033[39m"); + 				else if (tc->fg != 7) +-					tty_putcode1(tty, TTYC_SETAF, 7); ++					tty_putcode_i(tty, TTYC_SETAF, 7); + 				tc->fg = gc->fg; + 			} + 			if (COLOUR_DEFAULT(gc->bg) && !COLOUR_DEFAULT(tc->bg)) { + 				if (have_ax) + 					tty_puts(tty, "\033[49m"); + 				else if (tc->bg != 0) +-					tty_putcode1(tty, TTYC_SETAB, 0); ++					tty_putcode_i(tty, TTYC_SETAB, 0); + 				tc->bg = gc->bg; + 			} + 		} +@@ -2768,12 +2768,12 @@ tty_colours_fg(struct tty *tty, const struct grid_cell *gc) + 			xsnprintf(s, sizeof s, "\033[%dm", gc->fg); + 			tty_puts(tty, s); + 		} else +-			tty_putcode1(tty, TTYC_SETAF, gc->fg - 90 + 8); ++			tty_putcode_i(tty, TTYC_SETAF, gc->fg - 90 + 8); + 		goto save; + 	} +  + 	/* Otherwise set the foreground colour. */ +-	tty_putcode1(tty, TTYC_SETAF, gc->fg); ++	tty_putcode_i(tty, TTYC_SETAF, gc->fg); +  + save: + 	/* Save the new values in the terminal current cell. */ +@@ -2800,12 +2800,12 @@ tty_colours_bg(struct tty *tty, const struct grid_cell *gc) + 			xsnprintf(s, sizeof s, "\033[%dm", gc->bg + 10); + 			tty_puts(tty, s); + 		} else +-			tty_putcode1(tty, TTYC_SETAB, gc->bg - 90 + 8); ++			tty_putcode_i(tty, TTYC_SETAB, gc->bg - 90 + 8); + 		goto save; + 	} +  + 	/* Otherwise set the background colour. */ +-	tty_putcode1(tty, TTYC_SETAB, gc->bg); ++	tty_putcode_i(tty, TTYC_SETAB, gc->bg); +  + save: + 	/* Save the new values in the terminal current cell. */ +@@ -2841,10 +2841,10 @@ tty_colours_us(struct tty *tty, const struct grid_cell *gc) + 	 * non-RGB version may be wrong. + 	 */ + 	if (tty_term_has(tty->term, TTYC_SETULC)) +-		tty_putcode1(tty, TTYC_SETULC, c); ++		tty_putcode_i(tty, TTYC_SETULC, c); + 	else if (tty_term_has(tty->term, TTYC_SETAL) && + 	    tty_term_has(tty->term, TTYC_RGB)) +-		tty_putcode1(tty, TTYC_SETAL, c); ++		tty_putcode_i(tty, TTYC_SETAL, c); +  + save: + 	/* Save the new values in the terminal current cell. */ +@@ -2858,18 +2858,18 @@ tty_try_colour(struct tty *tty, int colour, const char *type) +  + 	if (colour & COLOUR_FLAG_256) { + 		if (*type == '3' && tty_term_has(tty->term, TTYC_SETAF)) +-			tty_putcode1(tty, TTYC_SETAF, colour & 0xff); ++			tty_putcode_i(tty, TTYC_SETAF, colour & 0xff); + 		else if (tty_term_has(tty->term, TTYC_SETAB)) +-			tty_putcode1(tty, TTYC_SETAB, colour & 0xff); ++			tty_putcode_i(tty, TTYC_SETAB, colour & 0xff); + 		return (0); + 	} +  + 	if (colour & COLOUR_FLAG_RGB) { + 		colour_split_rgb(colour & 0xffffff, &r, &g, &b); + 		if (*type == '3' && tty_term_has(tty->term, TTYC_SETRGBF)) +-			tty_putcode3(tty, TTYC_SETRGBF, r, g, b); ++			tty_putcode_iii(tty, TTYC_SETRGBF, r, g, b); + 		else if (tty_term_has(tty->term, TTYC_SETRGBB)) +-			tty_putcode3(tty, TTYC_SETRGBB, r, g, b); ++			tty_putcode_iii(tty, TTYC_SETRGBB, r, g, b); + 		return (0); + 	} +  +@@ -2953,7 +2953,7 @@ tty_clipboard_query(struct tty *tty) +  + 	if ((~tty->flags & TTY_STARTED) || (tty->flags & TTY_OSC52QUERY)) + 		return; +-	tty_putcode_ptr2(tty, TTYC_MS, "", "?"); ++	tty_putcode_ss(tty, TTYC_MS, "", "?"); +  + 	tty->flags |= TTY_OSC52QUERY; + 	evtimer_set(&tty->clipboard_timer, tty_clipboard_query_callback, tty); +--  +2.40.1 + + +From de51c8eb81b9db49fa34a8ea7886c9fe4164f46d Mon Sep 17 00:00:00 2001 +From: Nicholas Marriott <nicholas.marriott@gmail.com> +Date: Fri, 28 Apr 2023 06:44:40 +0100 +Subject: [PATCH 2/3] Use ncurses' new tparm_s function (added in 6.4-20230424) + instead of tparm so it does not object to string arguments in capabilities it + doesn't already know. + +(cherry picked from commit 39d41d0810d4e8ae6ce8d27776dfbb96722d9319) +--- + configure.ac |  4 ++++ + tty-term.c   | 48 +++++++++++++++++++++++++++++++++++++++--------- + 2 files changed, 43 insertions(+), 9 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 2b8b3b11..3c3c1873 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -344,6 +344,10 @@ else + 		AC_MSG_ERROR("curses not found") + 	fi + fi ++AC_CHECK_FUNCS([ \ ++	tiparm \ ++	tiparm_s \ ++]) +  + # Look for utempter. + AC_ARG_ENABLE( +diff --git a/tty-term.c b/tty-term.c +index 32dd849a..18b17420 100644 +--- a/tty-term.c ++++ b/tty-term.c +@@ -764,7 +764,13 @@ tty_term_string_i(struct tty_term *term, enum tty_code_code code, int a) + { + 	const char	*x = tty_term_string(term, code), *s; +  +-	s = tparm((char *)x, a); ++#if defined(HAVE_TIPARM_S) ++	s = tiparm_s(1, 0, x, a); ++#elif defined(HAVE_TIPARM) ++	s = tiparm(x, a); ++#else ++	s = tparm((char *)x, a, 0, 0, 0, 0, 0, 0, 0, 0); ++#endif + 	if (s == NULL) + 		fatalx("could not expand %s", tty_term_codes[code].name); + 	return (s); +@@ -775,19 +781,31 @@ tty_term_string_ii(struct tty_term *term, enum tty_code_code code, int a, int b) + { + 	const char	*x = tty_term_string(term, code), *s; +  +-	s = tparm((char *)x, a, b); ++#if defined(HAVE_TIPARM_S) ++	s = tiparm_s(2, 0, x, a, b); ++#elif defined(HAVE_TIPARM) ++	s = tiparm(x, a, b); ++#else ++	s = tparm((char *)x, a, b, 0, 0, 0, 0, 0, 0, 0); ++#endif + 	if (s == NULL) + 		fatalx("could not expand %s", tty_term_codes[code].name); + 	return (s); + } +  + const char * +-tty_term_string_iii(struct tty_term *term, enum tty_code_code code, int a, int b, +-    int c) ++tty_term_string_iii(struct tty_term *term, enum tty_code_code code, int a, ++    int b, int c) + { + 	const char	*x = tty_term_string(term, code), *s; +  +-	s = tparm((char *)x, a, b, c); ++#if defined(HAVE_TIPARM_S) ++	s = tiparm_s(3, 0, x, a, b, c); ++#elif defined(HAVE_TIPARM) ++	s = tiparm(x, a, b, c); ++#else ++	s = tparm((char *)x, a, b, c, 0, 0, 0, 0, 0, 0); ++#endif + 	if (s == NULL) + 		fatalx("could not expand %s", tty_term_codes[code].name); + 	return (s); +@@ -798,19 +816,31 @@ tty_term_string_s(struct tty_term *term, enum tty_code_code code, const char *a) + { + 	const char	*x = tty_term_string(term, code), *s; +  +-	s = tparm((char *)x, (long)a); ++#if defined(HAVE_TIPARM_S) ++	s = tiparm_s(1, 1, x, a); ++#elif defined(HAVE_TIPARM) ++	s = tiparm(x, a); ++#else ++	s = tparm((char *)x, (long)a, 0, 0, 0, 0, 0, 0, 0, 0); ++#endif + 	if (s == NULL) + 		fatalx("could not expand %s", tty_term_codes[code].name); + 	return (s); + } +  + const char * +-tty_term_string_ss(struct tty_term *term, enum tty_code_code code, const char *a, +-    const char *b) ++tty_term_string_ss(struct tty_term *term, enum tty_code_code code, ++    const char *a, const char *b) + { + 	const char	*x = tty_term_string(term, code), *s; +  +-	s = tparm((char *)x, (long)a, (long)b); ++#if defined(HAVE_TIPARM_S) ++	s = tiparm_s(2, 3, x, a, b); ++#elif defined(HAVE_TIPARM) ++	s = tiparm(x, a, b); ++#else ++	s = tparm((char *)x, (long)a, b, 0, 0, 0, 0, 0, 0, 0); ++#endif + 	if (s == NULL) + 		fatalx("could not expand %s", tty_term_codes[code].name); + 	return (s); +--  +2.40.1 + + +From 732135ed357566d65749fde1967f5639026d9418 Mon Sep 17 00:00:00 2001 +From: nicm <nicm> +Date: Fri, 28 Apr 2023 05:59:35 +0000 +Subject: [PATCH 3/3] Do not fatal if tparm fails, instead just log it (not + working sequences are better than exiting). + +(cherry picked from commit bf636d9575806134ca7efd917ee0d54e9330ae86) +--- + tty-term.c | 30 ++++++++++++++++++++---------- + 1 file changed, 20 insertions(+), 10 deletions(-) + +diff --git a/tty-term.c b/tty-term.c +index 18b17420..e489f610 100644 +--- a/tty-term.c ++++ b/tty-term.c +@@ -771,8 +771,10 @@ tty_term_string_i(struct tty_term *term, enum tty_code_code code, int a) + #else + 	s = tparm((char *)x, a, 0, 0, 0, 0, 0, 0, 0, 0); + #endif +-	if (s == NULL) +-		fatalx("could not expand %s", tty_term_codes[code].name); ++	if (s == NULL) { ++		log_debug("could not expand %s", tty_term_codes[code].name); ++		return (""); ++	} + 	return (s); + } +  +@@ -788,8 +790,10 @@ tty_term_string_ii(struct tty_term *term, enum tty_code_code code, int a, int b) + #else + 	s = tparm((char *)x, a, b, 0, 0, 0, 0, 0, 0, 0); + #endif +-	if (s == NULL) +-		fatalx("could not expand %s", tty_term_codes[code].name); ++	if (s == NULL) { ++		log_debug("could not expand %s", tty_term_codes[code].name); ++		return (""); ++	} + 	return (s); + } +  +@@ -806,8 +810,10 @@ tty_term_string_iii(struct tty_term *term, enum tty_code_code code, int a, + #else + 	s = tparm((char *)x, a, b, c, 0, 0, 0, 0, 0, 0); + #endif +-	if (s == NULL) +-		fatalx("could not expand %s", tty_term_codes[code].name); ++	if (s == NULL) { ++		log_debug("could not expand %s", tty_term_codes[code].name); ++		return (""); ++	} + 	return (s); + } +  +@@ -823,8 +829,10 @@ tty_term_string_s(struct tty_term *term, enum tty_code_code code, const char *a) + #else + 	s = tparm((char *)x, (long)a, 0, 0, 0, 0, 0, 0, 0, 0); + #endif +-	if (s == NULL) +-		fatalx("could not expand %s", tty_term_codes[code].name); ++	if (s == NULL) { ++		log_debug("could not expand %s", tty_term_codes[code].name); ++		return (""); ++	} + 	return (s); + } +  +@@ -841,8 +849,10 @@ tty_term_string_ss(struct tty_term *term, enum tty_code_code code, + #else + 	s = tparm((char *)x, (long)a, b, 0, 0, 0, 0, 0, 0, 0); + #endif +-	if (s == NULL) +-		fatalx("could not expand %s", tty_term_codes[code].name); ++	if (s == NULL) { ++		log_debug("could not expand %s", tty_term_codes[code].name); ++		return (""); ++	} + 	return (s); + } +  +--  +2.40.1 + @@ -6,7 +6,7 @@  pkgname=tmux  pkgver=3.3_a -pkgrel=3 +pkgrel=7  pkgdesc='Terminal multiplexer'  url='https://github.com/tmux/tmux/wiki'  arch=('x86_64') @@ -16,15 +16,21 @@ depends=('ncurses' 'libevent' 'libutempter')  # # But old-fashioned raw injection of -flto=auto via export doesn't.  #options=('lto')  source=("https://github.com/tmux/tmux/releases/download/${pkgver/_/}/tmux-${pkgver/_/}.tar.gz" -        "CVE-2022-47016.patch") +        '0001-CVE-2022-47016.patch' +        '0002-ncurses.patch')  sha256sums=('e4fd347843bd0772c4f48d6dde625b0b109b7a380ff15db21e97c11a4dcdf93f' -            '58fb690833e086b71b52555aa8eced695ace0a0bc51b8bccfda441e35a47ca93') +            '58fb690833e086b71b52555aa8eced695ace0a0bc51b8bccfda441e35a47ca93' +            '70e8cc2a95dd4a19ff54bcf0abaeff6464ebecbaace5ed0aec06ca93a84d415a')  b2sums=('e835ce0f136175521035a684419f221864edb0a9506d7d68cbc0239b1349e78949ebd96573a9d8651a2df6d99acb433075d6e0c20d7394a53fe6b44bd9e56069' -        '5d6e44167fc067da71a7b222eea9f631bf9a64e88846d243207e9e29ab25e0bc78addca6b006ceed43a45be88abc53822a1250fd5b9a7c4830496ef77408eae3') +        '5d6e44167fc067da71a7b222eea9f631bf9a64e88846d243207e9e29ab25e0bc78addca6b006ceed43a45be88abc53822a1250fd5b9a7c4830496ef77408eae3' +        '6077460e424e4857eea3bf36d88a400155d95481500b25005790f3de782b8e7f2790c3ba450f6704149f236562fb25b743575c0e73cbc3cbec7785aa729816c3')  prepare() {    cd "$pkgname-${pkgver/_/}" -  patch -Np1 -i ../CVE-2022-47016.patch +  patch -Np1 -i ../0001-CVE-2022-47016.patch +  patch -Np1 -i ../0002-ncurses.patch + +  autoreconf -fi  }  build() {  | 
