Module Name: src Committed By: blymn Date: Mon Dec 23 02:58:04 UTC 2024
Modified Files: src/lib/libcurses: add_wch.c add_wchstr.c addbytes.c addchnstr.c addwstr.c attributes.c background.c border.c chgat.c clear.c clearok.c clrtobot.c clrtoeol.c copywin.c delch.c erase.c fileio.c flushok.c get_wch.c get_wstr.c getstr.c getyx.c idcok.c idlok.c immedok.c in_wch.c in_wchstr.c inch.c inchstr.c ins_wch.c ins_wstr.c insch.c insdelln.c insstr.c instr.c inwstr.c keypad.c leaveok.c line.c meta.c mouse.c move.c mvwin.c newwin.c nodelay.c notimeout.c printw.c refresh.c resize.c scanw.c scroll.c scrollok.c standout.c syncok.c timeout.c toucholap.c touchwin.c tty.c underscore.c Log Message: Sprinkle about some cycle wasting checks for the win pointer being null. Unfortunately, ncurses does this and there is some sloppy code out there that relies on the check resulting in segfaults in NetBSD curses which then, of course, gets blamed for the error. To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/lib/libcurses/add_wch.c \ src/lib/libcurses/addchnstr.c src/lib/libcurses/chgat.c \ src/lib/libcurses/fileio.c src/lib/libcurses/timeout.c cvs rdiff -u -r1.14 -r1.15 src/lib/libcurses/add_wchstr.c \ src/lib/libcurses/inch.c cvs rdiff -u -r1.69 -r1.70 src/lib/libcurses/addbytes.c cvs rdiff -u -r1.8 -r1.9 src/lib/libcurses/addwstr.c \ src/lib/libcurses/in_wch.c src/lib/libcurses/instr.c cvs rdiff -u -r1.35 -r1.36 src/lib/libcurses/attributes.c \ src/lib/libcurses/clrtoeol.c cvs rdiff -u -r1.33 -r1.34 src/lib/libcurses/background.c cvs rdiff -u -r1.24 -r1.25 src/lib/libcurses/border.c \ src/lib/libcurses/ins_wstr.c src/lib/libcurses/mvwin.c cvs rdiff -u -r1.13 -r1.14 src/lib/libcurses/clear.c \ src/lib/libcurses/underscore.c cvs rdiff -u -r1.5 -r1.6 src/lib/libcurses/clearok.c cvs rdiff -u -r1.31 -r1.32 src/lib/libcurses/clrtobot.c cvs rdiff -u -r1.21 -r1.22 src/lib/libcurses/copywin.c cvs rdiff -u -r1.30 -r1.31 src/lib/libcurses/delch.c \ src/lib/libcurses/printw.c cvs rdiff -u -r1.37 -r1.38 src/lib/libcurses/erase.c cvs rdiff -u -r1.6 -r1.7 src/lib/libcurses/flushok.c \ src/lib/libcurses/scrollok.c cvs rdiff -u -r1.27 -r1.28 src/lib/libcurses/get_wch.c cvs rdiff -u -r1.11 -r1.12 src/lib/libcurses/get_wstr.c \ src/lib/libcurses/inchstr.c src/lib/libcurses/insstr.c cvs rdiff -u -r1.29 -r1.30 src/lib/libcurses/getstr.c cvs rdiff -u -r1.7 -r1.8 src/lib/libcurses/getyx.c \ src/lib/libcurses/leaveok.c src/lib/libcurses/nodelay.c \ src/lib/libcurses/notimeout.c cvs rdiff -u -r1.2 -r1.3 src/lib/libcurses/idcok.c \ src/lib/libcurses/immedok.c src/lib/libcurses/syncok.c cvs rdiff -u -r1.12 -r1.13 src/lib/libcurses/idlok.c cvs rdiff -u -r1.10 -r1.11 src/lib/libcurses/in_wchstr.c \ src/lib/libcurses/inwstr.c src/lib/libcurses/meta.c cvs rdiff -u -r1.20 -r1.21 src/lib/libcurses/ins_wch.c cvs rdiff -u -r1.28 -r1.29 src/lib/libcurses/insch.c \ src/lib/libcurses/scroll.c cvs rdiff -u -r1.23 -r1.24 src/lib/libcurses/insdelln.c \ src/lib/libcurses/scanw.c cvs rdiff -u -r1.15 -r1.16 src/lib/libcurses/keypad.c cvs rdiff -u -r1.18 -r1.19 src/lib/libcurses/line.c \ src/lib/libcurses/toucholap.c cvs rdiff -u -r1.1 -r1.2 src/lib/libcurses/mouse.c cvs rdiff -u -r1.25 -r1.26 src/lib/libcurses/move.c cvs rdiff -u -r1.67 -r1.68 src/lib/libcurses/newwin.c cvs rdiff -u -r1.128 -r1.129 src/lib/libcurses/refresh.c cvs rdiff -u -r1.36 -r1.37 src/lib/libcurses/resize.c cvs rdiff -u -r1.19 -r1.20 src/lib/libcurses/standout.c cvs rdiff -u -r1.34 -r1.35 src/lib/libcurses/touchwin.c cvs rdiff -u -r1.50 -r1.51 src/lib/libcurses/tty.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libcurses/add_wch.c diff -u src/lib/libcurses/add_wch.c:1.9 src/lib/libcurses/add_wch.c:1.10 --- src/lib/libcurses/add_wch.c:1.9 Sun Jun 9 07:40:14 2019 +++ src/lib/libcurses/add_wch.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: add_wch.c,v 1.9 2019/06/09 07:40:14 blymn Exp $ */ +/* $NetBSD: add_wch.c,v 1.10 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 2005 The NetBSD Foundation Inc. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: add_wch.c,v 1.9 2019/06/09 07:40:14 blymn Exp $"); +__RCSID("$NetBSD: add_wch.c,v 1.10 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include <stdlib.h> @@ -95,6 +95,9 @@ wadd_wch(WINDOW *win, const cchar_t *wch int y = win->cury; __LINE *lnp = NULL; + if (__predict_false(win == NULL)) + return ERR; + #ifdef DEBUG int i; int x = win->curx; Index: src/lib/libcurses/addchnstr.c diff -u src/lib/libcurses/addchnstr.c:1.9 src/lib/libcurses/addchnstr.c:1.10 --- src/lib/libcurses/addchnstr.c:1.9 Mon Sep 6 07:03:49 2021 +++ src/lib/libcurses/addchnstr.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: addchnstr.c,v 1.9 2021/09/06 07:03:49 rin Exp $ */ +/* $NetBSD: addchnstr.c,v 1.10 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: addchnstr.c,v 1.9 2021/09/06 07:03:49 rin Exp $"); +__RCSID("$NetBSD: addchnstr.c,v 1.10 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include <stdlib.h> @@ -140,6 +140,9 @@ waddchnstr(WINDOW *win, const chtype *ch __CTRACE(__CTRACE_INPUT, "waddchnstr: win = %p, chstr = %p, n = %d\n", win, chstr, n); + if (__predict_false(win == NULL)) + return ERR; + if (n >= 0) for (chp = chstr, len = 0; n-- && *chp++; ++len); else Index: src/lib/libcurses/chgat.c diff -u src/lib/libcurses/chgat.c:1.9 src/lib/libcurses/chgat.c:1.10 --- src/lib/libcurses/chgat.c:1.9 Wed Oct 19 06:09:27 2022 +++ src/lib/libcurses/chgat.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: chgat.c,v 1.9 2022/10/19 06:09:27 blymn Exp $ */ +/* $NetBSD: chgat.c,v 1.10 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: chgat.c,v 1.9 2022/10/19 06:09:27 blymn Exp $"); +__RCSID("$NetBSD: chgat.c,v 1.10 2024/12/23 02:58:03 blymn Exp $"); #include "curses.h" #include "curses_private.h" @@ -61,6 +61,9 @@ mvwchgat(WINDOW *win , int y, int x, int __LINE *lp; __LDATA *lc; + if (__predict_false(win == NULL)) + return ERR; + if (x < 0 || y < 0) return (ERR); if (x >= win->maxx || y >= win->maxy) Index: src/lib/libcurses/fileio.c diff -u src/lib/libcurses/fileio.c:1.9 src/lib/libcurses/fileio.c:1.10 --- src/lib/libcurses/fileio.c:1.9 Tue Sep 7 12:36:57 2021 +++ src/lib/libcurses/fileio.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: fileio.c,v 1.9 2021/09/07 12:36:57 rin Exp $ */ +/* $NetBSD: fileio.c,v 1.10 2024/12/23 02:58:03 blymn Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ #ifndef LIBHACK #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: fileio.c,v 1.9 2021/09/07 12:36:57 rin Exp $"); +__RCSID("$NetBSD: fileio.c,v 1.10 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -86,7 +86,7 @@ putwin(WINDOW *win, FILE *fp) __CTRACE(__CTRACE_FILEIO, "putwin: win %p\n", win); - if (win == NULL) + if (__predict_false(win == NULL)) return ERR; /* win can't be a subwin */ Index: src/lib/libcurses/timeout.c diff -u src/lib/libcurses/timeout.c:1.9 src/lib/libcurses/timeout.c:1.10 --- src/lib/libcurses/timeout.c:1.9 Fri Jan 6 13:53:18 2017 +++ src/lib/libcurses/timeout.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: timeout.c,v 1.9 2017/01/06 13:53:18 roy Exp $ */ +/* $NetBSD: timeout.c,v 1.10 2024/12/23 02:58:04 blymn Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: timeout.c,v 1.9 2017/01/06 13:53:18 roy Exp $"); +__RCSID("$NetBSD: timeout.c,v 1.10 2024/12/23 02:58:04 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -60,6 +60,9 @@ void wtimeout(WINDOW *win, int delay) { + if (__predict_false(win == NULL)) + return; + if (delay < 0) win->delay = -1; else if (!delay) Index: src/lib/libcurses/add_wchstr.c diff -u src/lib/libcurses/add_wchstr.c:1.14 src/lib/libcurses/add_wchstr.c:1.15 --- src/lib/libcurses/add_wchstr.c:1.14 Wed Oct 19 06:09:27 2022 +++ src/lib/libcurses/add_wchstr.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: add_wchstr.c,v 1.14 2022/10/19 06:09:27 blymn Exp $ */ +/* $NetBSD: add_wchstr.c,v 1.15 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 2005 The NetBSD Foundation Inc. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: add_wchstr.c,v 1.14 2022/10/19 06:09:27 blymn Exp $"); +__RCSID("$NetBSD: add_wchstr.c,v 1.15 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include <stdlib.h> @@ -145,6 +145,9 @@ wadd_wchnstr(WINDOW *win, const cchar_t __CTRACE(__CTRACE_INPUT, "wadd_wchnstr: win = %p, wchstr = %p, n = %d\n", win, wchstr, n); + if (__predict_false(win == NULL)) + return ERR; + if (!wchstr) return OK; Index: src/lib/libcurses/inch.c diff -u src/lib/libcurses/inch.c:1.14 src/lib/libcurses/inch.c:1.15 --- src/lib/libcurses/inch.c:1.14 Sun Jun 9 07:40:14 2019 +++ src/lib/libcurses/inch.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: inch.c,v 1.14 2019/06/09 07:40:14 blymn Exp $ */ +/* $NetBSD: inch.c,v 1.15 2024/12/23 02:58:03 blymn Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: inch.c,v 1.14 2019/06/09 07:40:14 blymn Exp $"); +__RCSID("$NetBSD: inch.c,v 1.15 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -87,6 +87,9 @@ winch(WINDOW *win) chtype ch; attr_t attr; + if (__predict_false(win == NULL)) + return ERR; + ch = (chtype) ((win)->alines[(win)->cury]->line[(win)->curx].ch & __CHARTEXT); attr = (attr_t) ((win)->alines[(win)->cury]->line[(win)->curx].attr & Index: src/lib/libcurses/addbytes.c diff -u src/lib/libcurses/addbytes.c:1.69 src/lib/libcurses/addbytes.c:1.70 --- src/lib/libcurses/addbytes.c:1.69 Thu Oct 5 06:15:03 2023 +++ src/lib/libcurses/addbytes.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: addbytes.c,v 1.69 2023/10/05 06:15:03 blymn Exp $ */ +/* $NetBSD: addbytes.c,v 1.70 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 1987, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)addbytes.c 8.4 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: addbytes.c,v 1.69 2023/10/05 06:15:03 blymn Exp $"); +__RCSID("$NetBSD: addbytes.c,v 1.70 2024/12/23 02:58:03 blymn Exp $"); #endif #endif /* not lint */ @@ -128,6 +128,9 @@ _cursesi_waddbytes(WINDOW *win, const ch #ifdef DEBUG int i; + if (__predict_false(win == NULL)) + return ERR; + for (i = 0; i < win->maxy; i++) { assert(win->alines[i]->sentinel == SENTINEL_VALUE); } @@ -206,6 +209,9 @@ _cursesi_addbyte(WINDOW *win, __LINE **l int newx, i, wcols; attr_t attributes; + if (__predict_false(win == NULL)) + return ERR; + if (char_interp) { switch (c) { case '\t': @@ -350,6 +356,9 @@ _cursesi_addwchar(WINDOW *win, __LINE ** cchar_t cc; attr_t attributes; + if (__predict_false(win == NULL)) + return ERR; + if (char_interp) { /* special characters handling */ switch (wch->vals[0]) { Index: src/lib/libcurses/addwstr.c diff -u src/lib/libcurses/addwstr.c:1.8 src/lib/libcurses/addwstr.c:1.9 --- src/lib/libcurses/addwstr.c:1.8 Mon Sep 6 07:45:48 2021 +++ src/lib/libcurses/addwstr.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: addwstr.c,v 1.8 2021/09/06 07:45:48 rin Exp $ */ +/* $NetBSD: addwstr.c,v 1.9 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 2005 The NetBSD Foundation Inc. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: addwstr.c,v 1.8 2021/09/06 07:45:48 rin Exp $"); +__RCSID("$NetBSD: addwstr.c,v 1.9 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include <string.h> @@ -134,6 +134,9 @@ waddnwstr(WINDOW *win, const wchar_t *s, cchar_t cc; wchar_t wc[2]; + if (__predict_false(win == NULL)) + return ERR; + /* * BSD curses: if (n > 0) then "at most n", else "len = strlen(s)" * ncurses: if (n >= 0) then "at most n", else "len = strlen(s)" Index: src/lib/libcurses/in_wch.c diff -u src/lib/libcurses/in_wch.c:1.8 src/lib/libcurses/in_wch.c:1.9 --- src/lib/libcurses/in_wch.c:1.8 Tue Jan 25 03:05:06 2022 +++ src/lib/libcurses/in_wch.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: in_wch.c,v 1.8 2022/01/25 03:05:06 blymn Exp $ */ +/* $NetBSD: in_wch.c,v 1.9 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 2005 The NetBSD Foundation Inc. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: in_wch.c,v 1.8 2022/01/25 03:05:06 blymn Exp $"); +__RCSID("$NetBSD: in_wch.c,v 1.9 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -82,6 +82,9 @@ mvwin_wch(WINDOW *win, int y, int x, cch int win_wch(WINDOW *win, cchar_t *wcval) { + if (__predict_false(win == NULL)) + return ERR; + nschar_t *np; __LDATA *lp = &win->alines[win->cury]->line[win->curx]; int cw = lp->wcols; Index: src/lib/libcurses/instr.c diff -u src/lib/libcurses/instr.c:1.8 src/lib/libcurses/instr.c:1.9 --- src/lib/libcurses/instr.c:1.8 Sun Aug 15 15:12:36 2021 +++ src/lib/libcurses/instr.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: instr.c,v 1.8 2021/08/15 15:12:36 rillig Exp $ */ +/* $NetBSD: instr.c,v 1.9 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright 2001 Wasabi Systems, Inc. @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: instr.c,v 1.8 2021/08/15 15:12:36 rillig Exp $"); +__RCSID("$NetBSD: instr.c,v 1.9 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -139,7 +139,7 @@ winnstr(WINDOW *win, char *str, int n) __LDATA *end, *start; int epos, sn; - if (str == NULL) + if ((win == NULL) || (str == NULL)) return ERR; sn = n; Index: src/lib/libcurses/attributes.c diff -u src/lib/libcurses/attributes.c:1.35 src/lib/libcurses/attributes.c:1.36 --- src/lib/libcurses/attributes.c:1.35 Tue Oct 25 06:20:01 2022 +++ src/lib/libcurses/attributes.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: attributes.c,v 1.35 2022/10/25 06:20:01 blymn Exp $ */ +/* $NetBSD: attributes.c,v 1.36 2024/12/23 02:58:03 blymn Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: attributes.c,v 1.35 2022/10/25 06:20:01 blymn Exp $"); +__RCSID("$NetBSD: attributes.c,v 1.36 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -198,6 +198,7 @@ wattr_set(WINDOW *win, attr_t attr, shor { __CTRACE(__CTRACE_ATTR, "wattr_set: win %p, attr %08x, pair %d\n", win, attr, pair); + if (__predict_false(opts != NULL)) return ERR; @@ -221,6 +222,10 @@ int wcolor_set(WINDOW *win, short pair, void *opts) { __CTRACE(__CTRACE_COLOR, "wolor_set: win %p, pair %d\n", win, pair); + + if (__predict_false(opts != NULL)) + return ERR; + __wcolor_set(win, (attr_t) COLOR_PAIR(pair)); return OK; } Index: src/lib/libcurses/clrtoeol.c diff -u src/lib/libcurses/clrtoeol.c:1.35 src/lib/libcurses/clrtoeol.c:1.36 --- src/lib/libcurses/clrtoeol.c:1.35 Thu May 12 22:25:38 2022 +++ src/lib/libcurses/clrtoeol.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: clrtoeol.c,v 1.35 2022/05/12 22:25:38 blymn Exp $ */ +/* $NetBSD: clrtoeol.c,v 1.36 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)clrtoeol.c 8.2 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: clrtoeol.c,v 1.35 2022/05/12 22:25:38 blymn Exp $"); +__RCSID("$NetBSD: clrtoeol.c,v 1.36 2024/12/23 02:58:03 blymn Exp $"); #endif #endif /* not lint */ @@ -68,6 +68,9 @@ wclrtoeol(WINDOW *win) wchar_t bch; attr_t battr; + if (__predict_false(win == NULL)) + return ERR; + bch = win->bch; if (win != curscr) battr = win->battr & __ATTRIBUTES; Index: src/lib/libcurses/background.c diff -u src/lib/libcurses/background.c:1.33 src/lib/libcurses/background.c:1.34 --- src/lib/libcurses/background.c:1.33 Wed Oct 19 06:09:27 2022 +++ src/lib/libcurses/background.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: background.c,v 1.33 2022/10/19 06:09:27 blymn Exp $ */ +/* $NetBSD: background.c,v 1.34 2024/12/23 02:58:03 blymn Exp $ */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: background.c,v 1.33 2022/10/19 06:09:27 blymn Exp $"); +__RCSID("$NetBSD: background.c,v 1.34 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include <stdlib.h> @@ -69,6 +69,9 @@ wbkgdset(WINDOW *win, chtype ch) __CTRACE(__CTRACE_ATTR, "wbkgdset: (%p), '%s', %08x\n", win, unctrl(ch & __CHARTEXT), ch & __ATTRIBUTES); + if (__predict_false(win == NULL)) + return; + /* Background character. */ if (ch & __CHARTEXT) win->bch = (wchar_t) ch & __CHARTEXT; @@ -91,6 +94,10 @@ wbkgd(WINDOW *win, chtype ch) __CTRACE(__CTRACE_ATTR, "wbkgd: (%p), '%s', %08x\n", win, unctrl(ch & __CHARTEXT), ch & __ATTRIBUTES); + + if (__predict_false(win == NULL)) + return ERR; + wbkgdset(win, ch); for (y = 0; y < win->maxy; y++) { @@ -121,6 +128,9 @@ getbkgd(WINDOW *win) { attr_t battr; + if (__predict_false(win == NULL)) + return ERR; + /* Background attributes (check colour). */ battr = win->battr & A_ATTRIBUTES; if (__using_color && ((battr & __COLOR) == __default_color)) @@ -165,6 +175,9 @@ wbkgrndset(WINDOW *win, const cchar_t *w __CTRACE(__CTRACE_ATTR, "wbkgrndset: (%p), '%s', %x\n", win, (const char *)wunctrl(wch), wch->attributes); + if (__predict_false(win == NULL)) + return; + /* ignore multi-column characters */ if (!wch->elements || wcwidth(wch->vals[0]) > 1) return; @@ -256,6 +269,9 @@ wbkgrnd(WINDOW *win, const cchar_t *wch) __CTRACE(__CTRACE_ATTR, "wbkgrnd: (%p), '%s', %x\n", win, (const char *)wunctrl(wch), wch->attributes); + if (__predict_false(win == NULL)) + return ERR; + /* ignore multi-column characters */ if (!wch->elements || wcwidth( wch->vals[ 0 ]) > 1) return ERR; @@ -271,6 +287,9 @@ wgetbkgrnd(WINDOW *win, cchar_t *wch) { nschar_t *np; + if (__predict_false(win == NULL)) + return ERR; + /* Background attributes (check colour). */ wch->attributes = win->battr & WA_ATTRIBUTES; if (__using_color && ((wch->attributes & __COLOR) == __default_color)) Index: src/lib/libcurses/border.c diff -u src/lib/libcurses/border.c:1.24 src/lib/libcurses/border.c:1.25 --- src/lib/libcurses/border.c:1.24 Tue May 3 07:25:34 2022 +++ src/lib/libcurses/border.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: border.c,v 1.24 2022/05/03 07:25:34 blymn Exp $ */ +/* $NetBSD: border.c,v 1.25 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 2000 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: border.c,v 1.24 2022/05/03 07:25:34 blymn Exp $"); +__RCSID("$NetBSD: border.c,v 1.25 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include <stdlib.h> @@ -70,6 +70,9 @@ wborder(WINDOW *win, chtype left, chtype int endy, endx, i; __LDATA *fp, *lp; + if (__predict_false(win == NULL)) + return; + if (!(left & __CHARTEXT)) left |= ACS_VLINE; if (!(right & __CHARTEXT)) @@ -205,6 +208,9 @@ int wborder_set(WINDOW *win, const cchar cchar_t left, right, bottom, top, topleft, topright, botleft, botright; nschar_t *np, *tnp; + if (__predict_false(win == NULL)) + return ERR; + if (ls && wcwidth(ls->vals[0])) memcpy(&left, ls, sizeof(cchar_t)); else Index: src/lib/libcurses/ins_wstr.c diff -u src/lib/libcurses/ins_wstr.c:1.24 src/lib/libcurses/ins_wstr.c:1.25 --- src/lib/libcurses/ins_wstr.c:1.24 Wed Oct 19 06:09:27 2022 +++ src/lib/libcurses/ins_wstr.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: ins_wstr.c,v 1.24 2022/10/19 06:09:27 blymn Exp $ */ +/* $NetBSD: ins_wstr.c,v 1.25 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 2005 The NetBSD Foundation Inc. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: ins_wstr.c,v 1.24 2022/10/19 06:09:27 blymn Exp $"); +__RCSID("$NetBSD: ins_wstr.c,v 1.25 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include <string.h> @@ -138,6 +138,9 @@ wins_nwstr(WINDOW *win, const wchar_t *w int width, len, lx, sx, x, y, tx, ty, cw, pcw, newx, tn, w; wchar_t ws[] = L" "; + if (__predict_false(win == NULL)) + return ERR; + /* check for leading non-spacing character */ if (!wstr) return OK; Index: src/lib/libcurses/mvwin.c diff -u src/lib/libcurses/mvwin.c:1.24 src/lib/libcurses/mvwin.c:1.25 --- src/lib/libcurses/mvwin.c:1.24 Tue Apr 12 07:03:04 2022 +++ src/lib/libcurses/mvwin.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: mvwin.c,v 1.24 2022/04/12 07:03:04 blymn Exp $ */ +/* $NetBSD: mvwin.c,v 1.25 2024/12/23 02:58:04 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)mvwin.c 8.2 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: mvwin.c,v 1.24 2022/04/12 07:03:04 blymn Exp $"); +__RCSID("$NetBSD: mvwin.c,v 1.25 2024/12/23 02:58:04 blymn Exp $"); #endif #endif /* not lint */ @@ -55,7 +55,7 @@ mvderwin(WINDOW *win, int dy, int dx) int x, i; __LINE *plp; - if (win == NULL) + if (__predict_false(win == NULL)) return ERR; parent = win->orig; @@ -102,6 +102,9 @@ mvwin(WINDOW *win, int by, int bx) WINDOW *orig; int dy, dx; + if (__predict_false(win == NULL)) + return ERR; + if (by < 0 || by + win->maxy > win->screen->LINES || bx < 0 || bx + win->maxx > win->screen->COLS) return ERR; Index: src/lib/libcurses/clear.c diff -u src/lib/libcurses/clear.c:1.13 src/lib/libcurses/clear.c:1.14 --- src/lib/libcurses/clear.c:1.13 Thu Aug 7 16:44:19 2003 +++ src/lib/libcurses/clear.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: clear.c,v 1.13 2003/08/07 16:44:19 agc Exp $ */ +/* $NetBSD: clear.c,v 1.14 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)clear.c 8.2 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: clear.c,v 1.13 2003/08/07 16:44:19 agc Exp $"); +__RCSID("$NetBSD: clear.c,v 1.14 2024/12/23 02:58:03 blymn Exp $"); #endif #endif /* not lint */ @@ -62,6 +62,9 @@ clear(void) int wclear(WINDOW *win) { + if (__predict_false(win == NULL)) + return ERR; + if (werase(win) == OK) { win->flags |= __CLEAROK; return (OK); Index: src/lib/libcurses/underscore.c diff -u src/lib/libcurses/underscore.c:1.13 src/lib/libcurses/underscore.c:1.14 --- src/lib/libcurses/underscore.c:1.13 Mon Sep 6 07:03:50 2021 +++ src/lib/libcurses/underscore.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: underscore.c,v 1.13 2021/09/06 07:03:50 rin Exp $ */ +/* $NetBSD: underscore.c,v 1.14 2024/12/23 02:58:04 blymn Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: underscore.c,v 1.13 2021/09/06 07:03:50 rin Exp $"); +__RCSID("$NetBSD: underscore.c,v 1.14 2024/12/23 02:58:04 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -71,6 +71,8 @@ underend(void) int wunderscore(WINDOW *win) { + if (__predict_false(win == NULL)) + return ERR; /* If can underscore, set the screen underscore bit. */ if ((enter_underline_mode != NULL && exit_underline_mode != NULL) || @@ -90,6 +92,9 @@ int wunderend(WINDOW *win) { + if (__predict_false(win == NULL)) + return ERR; + if (exit_underline_mode != NULL) { __CTRACE(__CTRACE_ATTR, "wunderend\n"); win->wattr &= ~__UNDERSCORE; Index: src/lib/libcurses/clearok.c diff -u src/lib/libcurses/clearok.c:1.5 src/lib/libcurses/clearok.c:1.6 --- src/lib/libcurses/clearok.c:1.5 Mon Apr 28 20:23:01 2008 +++ src/lib/libcurses/clearok.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: clearok.c,v 1.5 2008/04/28 20:23:01 martin Exp $ */ +/* $NetBSD: clearok.c,v 1.6 2024/12/23 02:58:03 blymn Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: clearok.c,v 1.5 2008/04/28 20:23:01 martin Exp $"); +__RCSID("$NetBSD: clearok.c,v 1.6 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -44,6 +44,9 @@ __RCSID("$NetBSD: clearok.c,v 1.5 2008/0 int clearok(WINDOW *win, bool bf) { + if (__predict_false(win == NULL)) + return ERR; + if (bf) win->flags |= __CLEAROK; else Index: src/lib/libcurses/clrtobot.c diff -u src/lib/libcurses/clrtobot.c:1.31 src/lib/libcurses/clrtobot.c:1.32 --- src/lib/libcurses/clrtobot.c:1.31 Wed Oct 19 06:09:27 2022 +++ src/lib/libcurses/clrtobot.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: clrtobot.c,v 1.31 2022/10/19 06:09:27 blymn Exp $ */ +/* $NetBSD: clrtobot.c,v 1.32 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)clrtobot.c 8.2 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: clrtobot.c,v 1.31 2022/10/19 06:09:27 blymn Exp $"); +__RCSID("$NetBSD: clrtobot.c,v 1.32 2024/12/23 02:58:03 blymn Exp $"); #endif #endif /* not lint */ @@ -68,6 +68,9 @@ wclrtobot(WINDOW *win) wchar_t bch; attr_t battr; + if (__predict_false(win == NULL)) + return ERR; + bch = win->bch; if (win != curscr) battr = win->battr & __ATTRIBUTES; Index: src/lib/libcurses/copywin.c diff -u src/lib/libcurses/copywin.c:1.21 src/lib/libcurses/copywin.c:1.22 --- src/lib/libcurses/copywin.c:1.21 Tue Apr 12 07:03:04 2022 +++ src/lib/libcurses/copywin.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: copywin.c,v 1.21 2022/04/12 07:03:04 blymn Exp $ */ +/* $NetBSD: copywin.c,v 1.22 2024/12/23 02:58:03 blymn Exp $ */ /*- * Copyright (c) 1998-1999 Brett Lymn @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: copywin.c,v 1.21 2022/04/12 07:03:04 blymn Exp $"); +__RCSID("$NetBSD: copywin.c,v 1.22 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include <ctype.h> @@ -64,6 +64,9 @@ int copywin(const WINDOW *srcwin, WINDOW dooverlay ? "overlay" : "overwrite", sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol); + if ((srcwin == NULL) || (dstwin == NULL)) + return ERR; + /* overwrite() and overlay() can come here with -ve srcwin coords */ if (sminrow < 0) { dminrow -= sminrow; Index: src/lib/libcurses/delch.c diff -u src/lib/libcurses/delch.c:1.30 src/lib/libcurses/delch.c:1.31 --- src/lib/libcurses/delch.c:1.30 Wed Oct 19 06:09:27 2022 +++ src/lib/libcurses/delch.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: delch.c,v 1.30 2022/10/19 06:09:27 blymn Exp $ */ +/* $NetBSD: delch.c,v 1.31 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)delch.c 8.2 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: delch.c,v 1.30 2022/10/19 06:09:27 blymn Exp $"); +__RCSID("$NetBSD: delch.c,v 1.31 2024/12/23 02:58:03 blymn Exp $"); #endif #endif /* not lint */ @@ -89,6 +89,9 @@ wdelch(WINDOW *win) { __LDATA *end, *temp1, *temp2; + if (__predict_false(win == NULL)) + return ERR; + #ifndef HAVE_WCHAR end = &win->alines[win->cury]->line[win->maxx - 1]; temp1 = &win->alines[win->cury]->line[win->curx]; Index: src/lib/libcurses/printw.c diff -u src/lib/libcurses/printw.c:1.30 src/lib/libcurses/printw.c:1.31 --- src/lib/libcurses/printw.c:1.30 Wed Dec 21 06:18:01 2022 +++ src/lib/libcurses/printw.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: printw.c,v 1.30 2022/12/21 06:18:01 blymn Exp $ */ +/* $NetBSD: printw.c,v 1.31 2024/12/23 02:58:04 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)printw.c 8.3 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: printw.c,v 1.30 2022/12/21 06:18:01 blymn Exp $"); +__RCSID("$NetBSD: printw.c,v 1.31 2024/12/23 02:58:04 blymn Exp $"); #endif #endif /* not lint */ @@ -72,6 +72,9 @@ wprintw(WINDOW *win, const char *fmt,... va_list ap; int ret; + if (__predict_false(win == NULL)) + return ERR; + va_start(ap, fmt); ret = vw_printw(win, fmt, ap); va_end(ap); @@ -122,6 +125,9 @@ vw_printw(WINDOW *win, const char *fmt, __CTRACE(__CTRACE_INPUT, "vw_printw: win %p\n", win); + if (__predict_false(win == NULL)) + return ERR; + if (win->fp == NULL) { win->fp = open_memstream(&win->buf, &win->buflen); if (__predict_false(win->fp == NULL)) Index: src/lib/libcurses/erase.c diff -u src/lib/libcurses/erase.c:1.37 src/lib/libcurses/erase.c:1.38 --- src/lib/libcurses/erase.c:1.37 Wed Oct 19 06:09:27 2022 +++ src/lib/libcurses/erase.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: erase.c,v 1.37 2022/10/19 06:09:27 blymn Exp $ */ +/* $NetBSD: erase.c,v 1.38 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)erase.c 8.2 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: erase.c,v 1.37 2022/10/19 06:09:27 blymn Exp $"); +__RCSID("$NetBSD: erase.c,v 1.38 2024/12/23 02:58:03 blymn Exp $"); #endif #endif /* not lint */ @@ -71,6 +71,9 @@ werase(WINDOW *win) __CTRACE(__CTRACE_ERASE, "werase: (%p)\n", win); + if (__predict_false(win == NULL)) + return ERR; + bch = win->bch; if (win != curscr) battr = win->battr & __ATTRIBUTES; Index: src/lib/libcurses/flushok.c diff -u src/lib/libcurses/flushok.c:1.6 src/lib/libcurses/flushok.c:1.7 --- src/lib/libcurses/flushok.c:1.6 Fri Jan 6 13:53:18 2017 +++ src/lib/libcurses/flushok.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: flushok.c,v 1.6 2017/01/06 13:53:18 roy Exp $ */ +/* $NetBSD: flushok.c,v 1.7 2024/12/23 02:58:03 blymn Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: flushok.c,v 1.6 2017/01/06 13:53:18 roy Exp $"); +__RCSID("$NetBSD: flushok.c,v 1.7 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -44,6 +44,9 @@ __RCSID("$NetBSD: flushok.c,v 1.6 2017/0 int flushok(WINDOW *win, bool bf) { + if (__predict_false(win == NULL)) + return ERR; + if (bf) win->flags |= __FLUSH; else Index: src/lib/libcurses/scrollok.c diff -u src/lib/libcurses/scrollok.c:1.6 src/lib/libcurses/scrollok.c:1.7 --- src/lib/libcurses/scrollok.c:1.6 Fri Jan 6 13:53:18 2017 +++ src/lib/libcurses/scrollok.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: scrollok.c,v 1.6 2017/01/06 13:53:18 roy Exp $ */ +/* $NetBSD: scrollok.c,v 1.7 2024/12/23 02:58:04 blymn Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: scrollok.c,v 1.6 2017/01/06 13:53:18 roy Exp $"); +__RCSID("$NetBSD: scrollok.c,v 1.7 2024/12/23 02:58:04 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -45,6 +45,9 @@ int scrollok(WINDOW *win, bool bf) { + if (__predict_false(win == NULL)) + return ERR; + if (bf) win->flags |= __SCROLLOK; else Index: src/lib/libcurses/get_wch.c diff -u src/lib/libcurses/get_wch.c:1.27 src/lib/libcurses/get_wch.c:1.28 --- src/lib/libcurses/get_wch.c:1.27 Sat Aug 24 22:27:03 2024 +++ src/lib/libcurses/get_wch.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: get_wch.c,v 1.27 2024/08/24 22:27:03 christos Exp $ */ +/* $NetBSD: get_wch.c,v 1.28 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 2005 The NetBSD Foundation Inc. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: get_wch.c,v 1.27 2024/08/24 22:27:03 christos Exp $"); +__RCSID("$NetBSD: get_wch.c,v 1.28 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include <errno.h> @@ -441,6 +441,9 @@ wget_wch(WINDOW *win, wint_t *ch) cchar_t wc; wchar_t inp, ws[2]; + if (__predict_false(win == NULL)) + return ERR; + if (!(win->flags & __SCROLLOK) && (win->flags & __FULLWIN) && win->curx == win->maxx - 1 Index: src/lib/libcurses/get_wstr.c diff -u src/lib/libcurses/get_wstr.c:1.11 src/lib/libcurses/get_wstr.c:1.12 --- src/lib/libcurses/get_wstr.c:1.11 Tue Apr 12 07:03:04 2022 +++ src/lib/libcurses/get_wstr.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: get_wstr.c,v 1.11 2022/04/12 07:03:04 blymn Exp $ */ +/* $NetBSD: get_wstr.c,v 1.12 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 2005 The NetBSD Foundation Inc. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: get_wstr.c,v 1.11 2022/04/12 07:03:04 blymn Exp $"); +__RCSID("$NetBSD: get_wstr.c,v 1.12 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -162,6 +162,9 @@ __wgetn_wstr(WINDOW *win, wchar_t *wstr, wint_t wc; cchar_t cc; + if (__predict_false(win == NULL)) + return ERR; + ostr = wstr; if (erasewchar(&ec) == ERR) return ERR; Index: src/lib/libcurses/inchstr.c diff -u src/lib/libcurses/inchstr.c:1.11 src/lib/libcurses/inchstr.c:1.12 --- src/lib/libcurses/inchstr.c:1.11 Sun Aug 15 15:12:36 2021 +++ src/lib/libcurses/inchstr.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: inchstr.c,v 1.11 2021/08/15 15:12:36 rillig Exp $ */ +/* $NetBSD: inchstr.c,v 1.12 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright 2001 Wasabi Systems, Inc. @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: inchstr.c,v 1.11 2021/08/15 15:12:36 rillig Exp $"); +__RCSID("$NetBSD: inchstr.c,v 1.12 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -137,6 +137,9 @@ winchnstr(WINDOW *win, chtype *chstr, in __LDATA *end, *start; int epos; + if (__predict_false(win == NULL)) + return ERR; + if (chstr == NULL) return ERR; Index: src/lib/libcurses/insstr.c diff -u src/lib/libcurses/insstr.c:1.11 src/lib/libcurses/insstr.c:1.12 --- src/lib/libcurses/insstr.c:1.11 Wed Oct 19 06:09:27 2022 +++ src/lib/libcurses/insstr.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: insstr.c,v 1.11 2022/10/19 06:09:27 blymn Exp $ */ +/* $NetBSD: insstr.c,v 1.12 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 2005 The NetBSD Foundation Inc. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: insstr.c,v 1.11 2022/10/19 06:09:27 blymn Exp $"); +__RCSID("$NetBSD: insstr.c,v 1.12 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include <string.h> @@ -150,6 +150,9 @@ winsnstr(WINDOW *win, const char *str, i nschar_t *np, *tnp; #endif /* HAVE_WCHAR */ + if (__predict_false(win == NULL)) + return ERR; + /* find string length */ if (n > 0) for (scp = str, len = 0; n-- && *scp++; ++len); Index: src/lib/libcurses/getstr.c diff -u src/lib/libcurses/getstr.c:1.29 src/lib/libcurses/getstr.c:1.30 --- src/lib/libcurses/getstr.c:1.29 Mon Sep 6 07:03:49 2021 +++ src/lib/libcurses/getstr.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: getstr.c,v 1.29 2021/09/06 07:03:49 rin Exp $ */ +/* $NetBSD: getstr.c,v 1.30 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -35,7 +35,7 @@ #if 0 static char sccsid[] = "@(#)getstr.c 8.2 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: getstr.c,v 1.29 2021/09/06 07:03:49 rin Exp $"); +__RCSID("$NetBSD: getstr.c,v 1.30 2024/12/23 02:58:03 blymn Exp $"); #endif #endif /* not lint */ @@ -164,6 +164,9 @@ __wgetnstr(WINDOW *win, char *str, int n char *ostr, ec, kc; int c, xpos, oldx, remain; + if (__predict_false(win == NULL)) + return ERR; + ostr = str; ec = erasechar(); kc = killchar(); Index: src/lib/libcurses/getyx.c diff -u src/lib/libcurses/getyx.c:1.7 src/lib/libcurses/getyx.c:1.8 --- src/lib/libcurses/getyx.c:1.7 Fri Apr 8 10:27:04 2022 +++ src/lib/libcurses/getyx.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: getyx.c,v 1.7 2022/04/08 10:27:04 andvar Exp $ */ +/* $NetBSD: getyx.c,v 1.8 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 2000 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: getyx.c,v 1.7 2022/04/08 10:27:04 andvar Exp $"); +__RCSID("$NetBSD: getyx.c,v 1.8 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include <stdlib.h> @@ -83,6 +83,9 @@ int getcury(WINDOW *win) { + if (__predict_false(win == NULL)) + return ERR; + return win->cury; } @@ -94,6 +97,9 @@ int getcurx(WINDOW *win) { + if (__predict_false(win == NULL)) + return ERR; + return win->curx; } @@ -105,6 +111,9 @@ int getbegy(WINDOW *win) { + if (__predict_false(win == NULL)) + return ERR; + return win->begy; } @@ -116,6 +125,9 @@ int getbegx(WINDOW *win) { + if (__predict_false(win == NULL)) + return ERR; + return win->begx; } @@ -127,6 +139,9 @@ int getmaxy(WINDOW *win) { + if (__predict_false(win == NULL)) + return ERR; + return win->maxy; } @@ -138,5 +153,8 @@ int getmaxx(WINDOW *win) { + if (__predict_false(win == NULL)) + return ERR; + return win->maxx; } Index: src/lib/libcurses/leaveok.c diff -u src/lib/libcurses/leaveok.c:1.7 src/lib/libcurses/leaveok.c:1.8 --- src/lib/libcurses/leaveok.c:1.7 Fri Jan 6 13:53:18 2017 +++ src/lib/libcurses/leaveok.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: leaveok.c,v 1.7 2017/01/06 13:53:18 roy Exp $ */ +/* $NetBSD: leaveok.c,v 1.8 2024/12/23 02:58:03 blymn Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: leaveok.c,v 1.7 2017/01/06 13:53:18 roy Exp $"); +__RCSID("$NetBSD: leaveok.c,v 1.8 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -44,6 +44,9 @@ __RCSID("$NetBSD: leaveok.c,v 1.7 2017/0 int leaveok(WINDOW *win, bool bf) { + if (__predict_false(win == NULL)) + return ERR; + if (bf) win->flags |= __LEAVEOK; else @@ -58,6 +61,8 @@ leaveok(WINDOW *win, bool bf) bool is_leaveok(const WINDOW *win) { + if (__predict_false(win == NULL)) + return ERR; return win->flags & __LEAVEOK ? true : false; } Index: src/lib/libcurses/nodelay.c diff -u src/lib/libcurses/nodelay.c:1.7 src/lib/libcurses/nodelay.c:1.8 --- src/lib/libcurses/nodelay.c:1.7 Fri Jan 6 13:53:18 2017 +++ src/lib/libcurses/nodelay.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: nodelay.c,v 1.7 2017/01/06 13:53:18 roy Exp $ */ +/* $NetBSD: nodelay.c,v 1.8 2024/12/23 02:58:04 blymn Exp $ */ /*- * Copyright (c) 1998-1999 Brett Lymn (bl...@baea.com.au, brett_l...@yahoo.com) @@ -28,7 +28,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: nodelay.c,v 1.7 2017/01/06 13:53:18 roy Exp $"); +__RCSID("$NetBSD: nodelay.c,v 1.8 2024/12/23 02:58:04 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -43,6 +43,9 @@ int nodelay(WINDOW *win, bool bf) { + if (__predict_false(win == NULL)) + return ERR; + if (bf) win->delay = 0; else Index: src/lib/libcurses/notimeout.c diff -u src/lib/libcurses/notimeout.c:1.7 src/lib/libcurses/notimeout.c:1.8 --- src/lib/libcurses/notimeout.c:1.7 Fri Jan 6 13:53:18 2017 +++ src/lib/libcurses/notimeout.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: notimeout.c,v 1.7 2017/01/06 13:53:18 roy Exp $ */ +/* $NetBSD: notimeout.c,v 1.8 2024/12/23 02:58:04 blymn Exp $ */ /*- * Copyright (c) 1998-2014 Brett Lymn (bl...@netbsd.org) @@ -28,7 +28,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: notimeout.c,v 1.7 2017/01/06 13:53:18 roy Exp $"); +__RCSID("$NetBSD: notimeout.c,v 1.8 2024/12/23 02:58:04 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -43,6 +43,9 @@ int notimeout(WINDOW *win, bool bf) { + if (__predict_false(win == NULL)) + return ERR; + if (bf) win->flags |= __NOTIMEOUT; else Index: src/lib/libcurses/idcok.c diff -u src/lib/libcurses/idcok.c:1.2 src/lib/libcurses/idcok.c:1.3 --- src/lib/libcurses/idcok.c:1.2 Fri Jan 6 13:53:18 2017 +++ src/lib/libcurses/idcok.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: idcok.c,v 1.2 2017/01/06 13:53:18 roy Exp $ */ +/* $NetBSD: idcok.c,v 1.3 2024/12/23 02:58:03 blymn Exp $ */ /*- * Copyright (c) 1998-1999 Brett Lymn (bl...@baea.com.au, brett_l...@yahoo.com) @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)idcok.c blymn 2002/06/06"; #else -__RCSID("$NetBSD: idcok.c,v 1.2 2017/01/06 13:53:18 roy Exp $"); +__RCSID("$NetBSD: idcok.c,v 1.3 2024/12/23 02:58:03 blymn Exp $"); #endif #endif /* not lint */ @@ -50,6 +50,9 @@ __RCSID("$NetBSD: idcok.c,v 1.2 2017/01/ int idcok(WINDOW *win, bool bf) { + if (__predict_false(win == NULL)) + return ERR; + if (bf) win->flags |= __IDCHAR; else Index: src/lib/libcurses/immedok.c diff -u src/lib/libcurses/immedok.c:1.2 src/lib/libcurses/immedok.c:1.3 --- src/lib/libcurses/immedok.c:1.2 Fri Jan 6 13:53:18 2017 +++ src/lib/libcurses/immedok.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: immedok.c,v 1.2 2017/01/06 13:53:18 roy Exp $ */ +/* $NetBSD: immedok.c,v 1.3 2024/12/23 02:58:03 blymn Exp $ */ /*- * Copyright (c) 2017 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: immedok.c,v 1.2 2017/01/06 13:53:18 roy Exp $"); +__RCSID("$NetBSD: immedok.c,v 1.3 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -44,6 +44,9 @@ __RCSID("$NetBSD: immedok.c,v 1.2 2017/0 int immedok(WINDOW *win, bool bf) { + if (__predict_false(win == NULL)) + return ERR; + if (bf) win->flags |= __IMMEDOK; else Index: src/lib/libcurses/syncok.c diff -u src/lib/libcurses/syncok.c:1.2 src/lib/libcurses/syncok.c:1.3 --- src/lib/libcurses/syncok.c:1.2 Fri Jan 6 13:53:18 2017 +++ src/lib/libcurses/syncok.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: syncok.c,v 1.2 2017/01/06 13:53:18 roy Exp $ */ +/* $NetBSD: syncok.c,v 1.3 2024/12/23 02:58:04 blymn Exp $ */ /*- * Copyright (c) 2017 The NetBSD Foundation, Inc. @@ -31,20 +31,23 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: syncok.c,v 1.2 2017/01/06 13:53:18 roy Exp $"); +__RCSID("$NetBSD: syncok.c,v 1.3 2024/12/23 02:58:04 blymn Exp $"); #endif /* not lint */ #include "curses.h" #include "curses_private.h" /* - * immedok -- + * syncok -- * Refresh the window when changed. */ int syncok(WINDOW *win, bool bf) { + if (__predict_false(win == NULL)) + return ERR; + if (bf) win->flags |= __SYNCOK; else Index: src/lib/libcurses/idlok.c diff -u src/lib/libcurses/idlok.c:1.12 src/lib/libcurses/idlok.c:1.13 --- src/lib/libcurses/idlok.c:1.12 Fri Jan 6 13:53:18 2017 +++ src/lib/libcurses/idlok.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: idlok.c,v 1.12 2017/01/06 13:53:18 roy Exp $ */ +/* $NetBSD: idlok.c,v 1.13 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)idlok.c 8.2 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: idlok.c,v 1.12 2017/01/06 13:53:18 roy Exp $"); +__RCSID("$NetBSD: idlok.c,v 1.13 2024/12/23 02:58:03 blymn Exp $"); #endif #endif /* not lint */ @@ -49,6 +49,9 @@ __RCSID("$NetBSD: idlok.c,v 1.12 2017/01 int idlok(WINDOW *win, bool bf) { + if (__predict_false(win == NULL)) + return ERR; + if (bf) win->flags |= __IDLINE; else Index: src/lib/libcurses/in_wchstr.c diff -u src/lib/libcurses/in_wchstr.c:1.10 src/lib/libcurses/in_wchstr.c:1.11 --- src/lib/libcurses/in_wchstr.c:1.10 Tue Jan 25 03:05:06 2022 +++ src/lib/libcurses/in_wchstr.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: in_wchstr.c,v 1.10 2022/01/25 03:05:06 blymn Exp $ */ +/* $NetBSD: in_wchstr.c,v 1.11 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 2005 The NetBSD Foundation Inc. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: in_wchstr.c,v 1.10 2022/01/25 03:05:06 blymn Exp $"); +__RCSID("$NetBSD: in_wchstr.c,v 1.11 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -127,6 +127,9 @@ win_wchnstr(WINDOW *win, cchar_t *wchstr cchar_t *wcp; nschar_t *np; + if (__predict_false(win == NULL)) + return ERR; + if (wchstr == NULL) return ERR; Index: src/lib/libcurses/inwstr.c diff -u src/lib/libcurses/inwstr.c:1.10 src/lib/libcurses/inwstr.c:1.11 --- src/lib/libcurses/inwstr.c:1.10 Tue Jan 25 03:05:06 2022 +++ src/lib/libcurses/inwstr.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: inwstr.c,v 1.10 2022/01/25 03:05:06 blymn Exp $ */ +/* $NetBSD: inwstr.c,v 1.11 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 2005 The NetBSD Foundation Inc. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: inwstr.c,v 1.10 2022/01/25 03:05:06 blymn Exp $"); +__RCSID("$NetBSD: inwstr.c,v 1.11 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -131,6 +131,9 @@ winnwstr(WINDOW *win, wchar_t *wstr, int int x, cw, cnt; wchar_t *wcp; + if (__predict_false(win == NULL)) + return ERR; + if (wstr == NULL) return ERR; Index: src/lib/libcurses/meta.c diff -u src/lib/libcurses/meta.c:1.10 src/lib/libcurses/meta.c:1.11 --- src/lib/libcurses/meta.c:1.10 Mon Sep 6 07:03:50 2021 +++ src/lib/libcurses/meta.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: meta.c,v 1.10 2021/09/06 07:03:50 rin Exp $ */ +/* $NetBSD: meta.c,v 1.11 2024/12/23 02:58:03 blymn Exp $ */ /*- * Copyright (c) 1998-2000 Brett Lymn @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: meta.c,v 1.10 2021/09/06 07:03:50 rin Exp $"); +__RCSID("$NetBSD: meta.c,v 1.11 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -44,6 +44,8 @@ __RCSID("$NetBSD: meta.c,v 1.10 2021/09/ int meta(/*ARGSUSED*/ WINDOW *win, bool bf) { + if (__predict_false(win == NULL)) + return ERR; if (bf == TRUE) { if (meta_on != NULL) { Index: src/lib/libcurses/ins_wch.c diff -u src/lib/libcurses/ins_wch.c:1.20 src/lib/libcurses/ins_wch.c:1.21 --- src/lib/libcurses/ins_wch.c:1.20 Wed Oct 19 06:09:27 2022 +++ src/lib/libcurses/ins_wch.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: ins_wch.c,v 1.20 2022/10/19 06:09:27 blymn Exp $ */ +/* $NetBSD: ins_wch.c,v 1.21 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 2005 The NetBSD Foundation Inc. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: ins_wch.c,v 1.20 2022/10/19 06:09:27 blymn Exp $"); +__RCSID("$NetBSD: ins_wch.c,v 1.21 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include <string.h> @@ -91,6 +91,9 @@ wins_wch(WINDOW *win, const cchar_t *wch nschar_t *np, *tnp; wchar_t ws[] = L" "; + if (__predict_false(win == NULL)) + return ERR; + /* check for non-spacing characters */ if (!wch) return OK; Index: src/lib/libcurses/insch.c diff -u src/lib/libcurses/insch.c:1.28 src/lib/libcurses/insch.c:1.29 --- src/lib/libcurses/insch.c:1.28 Wed Oct 19 06:09:27 2022 +++ src/lib/libcurses/insch.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: insch.c,v 1.28 2022/10/19 06:09:27 blymn Exp $ */ +/* $NetBSD: insch.c,v 1.29 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)insch.c 8.2 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: insch.c,v 1.28 2022/10/19 06:09:27 blymn Exp $"); +__RCSID("$NetBSD: insch.c,v 1.29 2024/12/23 02:58:03 blymn Exp $"); #endif #endif /* not lint */ @@ -94,6 +94,9 @@ winsch(WINDOW *win, chtype ch) __LDATA *end, *temp1, *temp2; attr_t attr; + if (__predict_false(win == NULL)) + return ERR; + if (__using_color) attr = win->battr & __COLOR; else Index: src/lib/libcurses/scroll.c diff -u src/lib/libcurses/scroll.c:1.28 src/lib/libcurses/scroll.c:1.29 --- src/lib/libcurses/scroll.c:1.28 Thu Dec 5 04:08:12 2024 +++ src/lib/libcurses/scroll.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: scroll.c,v 1.28 2024/12/05 04:08:12 blymn Exp $ */ +/* $NetBSD: scroll.c,v 1.29 2024/12/23 02:58:04 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)scroll.c 8.3 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: scroll.c,v 1.28 2024/12/05 04:08:12 blymn Exp $"); +__RCSID("$NetBSD: scroll.c,v 1.29 2024/12/23 02:58:04 blymn Exp $"); #endif #endif /* not lint */ @@ -100,6 +100,9 @@ wscrl(WINDOW *win, int nlines) __CTRACE(__CTRACE_WINDOW, "wscrl: (%p) lines=%d\n", win, nlines); + if (__predict_false(win == NULL)) + return ERR; + if (!(win->flags & __SCROLLOK)) return ERR; if (!nlines) @@ -127,6 +130,9 @@ wscrl(WINDOW *win, int nlines) int wsetscrreg(WINDOW *win, int top, int bottom) { + if (__predict_false(win == NULL)) + return ERR; + if (top < 0 || bottom >= win->maxy || bottom - top < 1) return ERR; win->scr_t = top; @@ -141,6 +147,9 @@ wsetscrreg(WINDOW *win, int top, int bot int wgetscrreg(WINDOW *win, int *top, int *bottom) { + if (__predict_false(win == NULL)) + return ERR; + *top = win->scr_t; *bottom = win->scr_b; return OK; Index: src/lib/libcurses/insdelln.c diff -u src/lib/libcurses/insdelln.c:1.23 src/lib/libcurses/insdelln.c:1.24 --- src/lib/libcurses/insdelln.c:1.23 Wed Oct 19 06:09:27 2022 +++ src/lib/libcurses/insdelln.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: insdelln.c,v 1.23 2022/10/19 06:09:27 blymn Exp $ */ +/* $NetBSD: insdelln.c,v 1.24 2024/12/23 02:58:03 blymn Exp $ */ /* * Copyright (c) 2000 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: insdelln.c,v 1.23 2022/10/19 06:09:27 blymn Exp $"); +__RCSID("$NetBSD: insdelln.c,v 1.24 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ /* @@ -78,6 +78,9 @@ winsdelln(WINDOW *win, int nlines) __CTRACE(__CTRACE_LINE, "winsdelln: (%p) cury=%d lines=%d\n", win, win->cury, nlines); + if (__predict_false(win == NULL)) + return ERR; + if (!nlines) return OK; Index: src/lib/libcurses/scanw.c diff -u src/lib/libcurses/scanw.c:1.23 src/lib/libcurses/scanw.c:1.24 --- src/lib/libcurses/scanw.c:1.23 Sun Jun 30 22:16:20 2019 +++ src/lib/libcurses/scanw.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: scanw.c,v 1.23 2019/06/30 22:16:20 blymn Exp $ */ +/* $NetBSD: scanw.c,v 1.24 2024/12/23 02:58:04 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)scanw.c 8.3 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: scanw.c,v 1.23 2019/06/30 22:16:20 blymn Exp $"); +__RCSID("$NetBSD: scanw.c,v 1.24 2024/12/23 02:58:04 blymn Exp $"); #endif #endif /* not lint */ @@ -71,6 +71,9 @@ wscanw(WINDOW *win, const char *fmt,...) va_list ap; int ret; + if (__predict_false(win == NULL)) + return ERR; + va_start(ap, fmt); ret = vw_scanw(win, fmt, ap); va_end(ap); @@ -118,6 +121,9 @@ vw_scanw(WINDOW *win, const char *fmt, v char buf[1024]; int ret; + if (__predict_false(win == NULL)) + return ERR; + ret = ERR; if (wgetnstr(win, buf, (int) sizeof(buf)) == OK) { if (vsscanf(buf, fmt, ap) > 0) { Index: src/lib/libcurses/keypad.c diff -u src/lib/libcurses/keypad.c:1.15 src/lib/libcurses/keypad.c:1.16 --- src/lib/libcurses/keypad.c:1.15 Mon Sep 6 07:03:49 2021 +++ src/lib/libcurses/keypad.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: keypad.c,v 1.15 2021/09/06 07:03:49 rin Exp $ */ +/* $NetBSD: keypad.c,v 1.16 2024/12/23 02:58:03 blymn Exp $ */ /*- * Copyright (c) 1998-1999 Brett Lymn (bl...@baea.com.au, brett_l...@yahoo.com) @@ -28,7 +28,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: keypad.c,v 1.15 2021/09/06 07:03:49 rin Exp $"); +__RCSID("$NetBSD: keypad.c,v 1.16 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -44,6 +44,9 @@ keypad(WINDOW *win, bool bf) { __CTRACE(__CTRACE_MISC, "keypad: win %p, %s\n", win, bf ? "TRUE" : "FALSE"); + if (__predict_false(win == NULL)) + return ERR; + if (bf) { win->flags |= __KEYPAD; if (!(curscr->flags & __KEYPAD)) { @@ -63,6 +66,9 @@ keypad(WINDOW *win, bool bf) bool is_keypad(const WINDOW *win) { + if (__predict_false(win == NULL)) + return ERR; + return win->flags & __KEYPAD ? true : false; } Index: src/lib/libcurses/line.c diff -u src/lib/libcurses/line.c:1.18 src/lib/libcurses/line.c:1.19 --- src/lib/libcurses/line.c:1.18 Sun Sep 8 09:36:47 2024 +++ src/lib/libcurses/line.c Mon Dec 23 02:58:03 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: line.c,v 1.18 2024/09/08 09:36:47 rillig Exp $ */ +/* $NetBSD: line.c,v 1.19 2024/12/23 02:58:03 blymn Exp $ */ /*- * Copyright (c) 1998-1999 Brett Lymn @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: line.c,v 1.18 2024/09/08 09:36:47 rillig Exp $"); +__RCSID("$NetBSD: line.c,v 1.19 2024/12/23 02:58:03 blymn Exp $"); #endif /* not lint */ #include <string.h> @@ -87,6 +87,9 @@ int whline(WINDOW *win, chtype ch, int count) { #ifndef HAVE_WCHAR + if (__predict_false(win == NULL)) + return ERR; + int ocury, ocurx, n, i; n = min(count, win->maxx - win->curx); @@ -157,6 +160,9 @@ wvline(WINDOW *win, chtype ch, int count #ifndef HAVE_WCHAR int ocury, ocurx, n, i; + if (__predict_false(win == NULL)) + return ERR; + n = min(count, win->maxy - win->cury); ocury = win->cury; ocurx = win->curx; @@ -214,6 +220,9 @@ int whline_set(WINDOW *win, const cchar_ int ocury, ocurx, wcn, i, cw; cchar_t cc; + if (__predict_false(win == NULL)) + return ERR; + cc = *wch; if (!cc.vals[0]) { cc.vals[0] = WACS_HLINE->vals[0]; @@ -280,6 +289,9 @@ int wvline_set(WINDOW *win, const cchar_ int ocury, ocurx, wcn, i; cchar_t cc; + if (__predict_false(win == NULL)) + return ERR; + wcn = min(n, win->maxy - win->cury); __CTRACE(__CTRACE_LINE, "wvline_set: line of %d\n", wcn); ocury = win->cury; Index: src/lib/libcurses/toucholap.c diff -u src/lib/libcurses/toucholap.c:1.18 src/lib/libcurses/toucholap.c:1.19 --- src/lib/libcurses/toucholap.c:1.18 Mon Sep 6 07:03:50 2021 +++ src/lib/libcurses/toucholap.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: toucholap.c,v 1.18 2021/09/06 07:03:50 rin Exp $ */ +/* $NetBSD: toucholap.c,v 1.19 2024/12/23 02:58:04 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)toucholap.c 8.2 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: toucholap.c,v 1.18 2021/09/06 07:03:50 rin Exp $"); +__RCSID("$NetBSD: toucholap.c,v 1.19 2024/12/23 02:58:04 blymn Exp $"); #endif #endif /* not lint */ @@ -51,6 +51,10 @@ touchoverlap(WINDOW *win1, WINDOW *win2) int y, endy, endx, starty, startx; __CTRACE(__CTRACE_WINDOW, "touchoverlap: (%p, %p);\n", win1, win2); + + if (__predict_false(win1 == NULL) || __predict_false(win2 == NULL)) + return ERR; + starty = max(win1->begy, win2->begy); startx = max(win1->begx, win2->begx); endy = min(win1->maxy + win1->begy, win2->maxy + win2->begy); Index: src/lib/libcurses/mouse.c diff -u src/lib/libcurses/mouse.c:1.1 src/lib/libcurses/mouse.c:1.2 --- src/lib/libcurses/mouse.c:1.1 Mon Mar 23 13:37:36 2020 +++ src/lib/libcurses/mouse.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: mouse.c,v 1.1 2020/03/23 13:37:36 roy Exp $ */ +/* $NetBSD: mouse.c,v 1.2 2024/12/23 02:58:04 blymn Exp $ */ /*- * Copyright (c) 2020 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: mouse.c,v 1.1 2020/03/23 13:37:36 roy Exp $"); +__RCSID("$NetBSD: mouse.c,v 1.2 2024/12/23 02:58:04 blymn Exp $"); #endif /* not lint */ #include "curses.h" @@ -46,6 +46,9 @@ bool wenclose(const WINDOW *win, int y, int x) { + if (__predict_false(win == NULL)) + return ERR; + if (y < win->begy || y > win->begy + win->maxy || x < win->begx || x > win->begx + win->maxx) return false; @@ -66,6 +69,9 @@ bool wmouse_trafo(const WINDOW *win, int { int wy = *y, wx = *x; + if (__predict_false(win == NULL)) + return ERR; + if (to_screen) { wy += win->begy; wx += win->begx; Index: src/lib/libcurses/move.c diff -u src/lib/libcurses/move.c:1.25 src/lib/libcurses/move.c:1.26 --- src/lib/libcurses/move.c:1.25 Fri Nov 4 06:12:22 2022 +++ src/lib/libcurses/move.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: move.c,v 1.25 2022/11/04 06:12:22 blymn Exp $ */ +/* $NetBSD: move.c,v 1.26 2024/12/23 02:58:04 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)move.c 8.2 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: move.c,v 1.25 2022/11/04 06:12:22 blymn Exp $"); +__RCSID("$NetBSD: move.c,v 1.26 2024/12/23 02:58:04 blymn Exp $"); #endif #endif /* not lint */ @@ -63,6 +63,9 @@ int wmove(WINDOW *win, int y, int x) { __CTRACE(__CTRACE_MISC, "wmove: win %p, (%d, %d)\n", win, y, x); + if (__predict_false(win == NULL)) + return ERR; + if (x < 0 || y < 0) return ERR; if (x > win->maxx || y >= win->maxy) @@ -86,6 +89,9 @@ void wcursyncup(WINDOW *win) { + if (__predict_false(win == NULL)) + return; + while (win->orig) { wmove(win->orig, win->cury + win->begy - win->orig->begy, win->curx + win->begx - win->orig->begx); Index: src/lib/libcurses/newwin.c diff -u src/lib/libcurses/newwin.c:1.67 src/lib/libcurses/newwin.c:1.68 --- src/lib/libcurses/newwin.c:1.67 Tue May 3 07:25:34 2022 +++ src/lib/libcurses/newwin.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: newwin.c,v 1.67 2022/05/03 07:25:34 blymn Exp $ */ +/* $NetBSD: newwin.c,v 1.68 2024/12/23 02:58:04 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)newwin.c 8.3 (Berkeley) 7/27/94"; #else -__RCSID("$NetBSD: newwin.c,v 1.67 2022/05/03 07:25:34 blymn Exp $"); +__RCSID("$NetBSD: newwin.c,v 1.68 2024/12/23 02:58:04 blymn Exp $"); #endif #endif /* not lint */ @@ -84,6 +84,9 @@ dupwin(WINDOW *win) { WINDOW *new_one; + if (__predict_false(win == NULL)) + return NULL; + if ((new_one = __newwin(_cursesi_screen, win->maxy, win->maxx, win->begy, win->begx, FALSE, win == stdscr ? TRUE : FALSE)) == NULL) @@ -195,8 +198,9 @@ __subwin(WINDOW *orig, int nlines, int n __CTRACE(__CTRACE_WINDOW, "subwin: (%p, %d, %d, %d, %d, %d)\n", orig, nlines, ncols, by, bx, ispad); - if (orig == NULL) - return NULL; + + if (__predict_false(orig == NULL)) + return NULL; /* Make sure window fits inside the original one. */ maxy = nlines > 0 ? nlines : orig->maxy + orig->begy - by + nlines; @@ -414,5 +418,8 @@ bool is_pad(const WINDOW *win) { + if (__predict_false(win == NULL)) + return false; + return win->flags & __ISPAD ? true : false; } Index: src/lib/libcurses/refresh.c diff -u src/lib/libcurses/refresh.c:1.128 src/lib/libcurses/refresh.c:1.129 --- src/lib/libcurses/refresh.c:1.128 Sat Jun 24 05:18:13 2023 +++ src/lib/libcurses/refresh.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: refresh.c,v 1.128 2023/06/24 05:18:13 msaitoh Exp $ */ +/* $NetBSD: refresh.c,v 1.129 2024/12/23 02:58:04 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)refresh.c 8.7 (Berkeley) 8/13/94"; #else -__RCSID("$NetBSD: refresh.c,v 1.128 2023/06/24 05:18:13 msaitoh Exp $"); +__RCSID("$NetBSD: refresh.c,v 1.129 2024/12/23 02:58:04 blymn Exp $"); #endif #endif /* not lint */ @@ -109,6 +109,9 @@ pnoutrefresh(WINDOW *pad, int pbegy, int "pnoutrefresh: (%d, %d), (%d, %d), (%d, %d)\n", pbegy, pbegx, sbegy, sbegx, smaxy, smaxx); + if (__predict_false(pad == NULL)) + return ERR; + /* SUS says if these are negative, they should be treated as zero */ if (pbegy < 0) pbegy = 0; @@ -163,6 +166,9 @@ _wnoutrefresh(WINDOW *win, int begy, int "_wnoutrefresh: (%d, %d), (%d, %d), (%d, %d)\n", begy, begx, wbegy, wbegx, maxy, maxx); + if (__predict_false(win == NULL)) + return ERR; + if (screen->curwin) return OK; @@ -470,6 +476,9 @@ wrefresh(WINDOW *win) __CTRACE(__CTRACE_REFRESH, "wrefresh: win %p\n", win); + if (__predict_false(win == NULL)) + return ERR; + _cursesi_screen->curwin = (win == _cursesi_screen->curscr); if (!_cursesi_screen->curwin) { pbegx = pbegy = 0; @@ -507,6 +516,10 @@ prefresh(WINDOW *pad, int pbegy, int pbe __CTRACE(__CTRACE_REFRESH, "prefresh: pad %p, flags 0x%08x\n", pad, pad->flags); + + if (__predict_false(pad == NULL)) + return ERR; + /* Retain values in case pechochar() is called. */ pad->pbegy = pbegy; pad->pbegx = pbegx; Index: src/lib/libcurses/resize.c diff -u src/lib/libcurses/resize.c:1.36 src/lib/libcurses/resize.c:1.37 --- src/lib/libcurses/resize.c:1.36 Wed Oct 19 06:09:27 2022 +++ src/lib/libcurses/resize.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: resize.c,v 1.36 2022/10/19 06:09:27 blymn Exp $ */ +/* $NetBSD: resize.c,v 1.37 2024/12/23 02:58:04 blymn Exp $ */ /* * Copyright (c) 2001 @@ -33,7 +33,7 @@ #if 0 static char sccsid[] = "@(#)resize.c blymn 2001/08/26"; #else -__RCSID("$NetBSD: resize.c,v 1.36 2022/10/19 06:09:27 blymn Exp $"); +__RCSID("$NetBSD: resize.c,v 1.37 2024/12/23 02:58:04 blymn Exp $"); #endif #endif /* not lint */ @@ -55,7 +55,7 @@ wresize(WINDOW *win, int req_nlines, int int nlines = req_nlines; int ncols = req_ncols; - if (win == NULL) + if (__predict_false(win == NULL)) return ERR; __CTRACE(__CTRACE_WINDOW, "wresize: (%p, %d, %d)\n", Index: src/lib/libcurses/standout.c diff -u src/lib/libcurses/standout.c:1.19 src/lib/libcurses/standout.c:1.20 --- src/lib/libcurses/standout.c:1.19 Tue Jan 10 23:49:20 2017 +++ src/lib/libcurses/standout.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: standout.c,v 1.19 2017/01/10 23:49:20 roy Exp $ */ +/* $NetBSD: standout.c,v 1.20 2024/12/23 02:58:04 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)standout.c 8.3 (Berkeley) 8/10/94"; #else -__RCSID("$NetBSD: standout.c,v 1.19 2017/01/10 23:49:20 roy Exp $"); +__RCSID("$NetBSD: standout.c,v 1.20 2024/12/23 02:58:04 blymn Exp $"); #endif #endif /* not lint */ @@ -74,6 +74,9 @@ standend(void) int wstandout(WINDOW *win) { + if (__predict_false(win == NULL)) + return ERR; + const TERMINAL *t = win->screen->term; /* @@ -94,6 +97,8 @@ wstandout(WINDOW *win) int wstandend(WINDOW *win) { + if (__predict_false(win == NULL)) + return ERR; // http://pubs.opengroup.org/onlinepubs/7908799/xcurses/wstandend.html win->wattr = __NORMAL; Index: src/lib/libcurses/touchwin.c diff -u src/lib/libcurses/touchwin.c:1.34 src/lib/libcurses/touchwin.c:1.35 --- src/lib/libcurses/touchwin.c:1.34 Tue Apr 12 07:03:04 2022 +++ src/lib/libcurses/touchwin.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: touchwin.c,v 1.34 2022/04/12 07:03:04 blymn Exp $ */ +/* $NetBSD: touchwin.c,v 1.35 2024/12/23 02:58:04 blymn Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)touchwin.c 8.2 (Berkeley) 5/4/94"; #else -__RCSID("$NetBSD: touchwin.c,v 1.34 2022/04/12 07:03:04 blymn Exp $"); +__RCSID("$NetBSD: touchwin.c,v 1.35 2024/12/23 02:58:04 blymn Exp $"); #endif #endif /* not lint */ @@ -50,6 +50,8 @@ static int _cursesi_touchline_force(WIND void __sync(WINDOW *win) { + if (__predict_false(win == NULL)) + return; if (win->flags & __IMMEDOK) wrefresh(win); @@ -64,6 +66,9 @@ __sync(WINDOW *win) bool is_linetouched(WINDOW *win, int line) { + if (__predict_false(win == NULL)) + return ERR; + if (line > win->maxy) return FALSE; @@ -106,6 +111,9 @@ is_wintouched(WINDOW *win) __CTRACE(__CTRACE_LINE, "is_wintouched: (%p, maxy %d)\n", win, win->maxy); + if (__predict_false(win == NULL)) + return FALSE; + maxy = win->maxy; for (y = 0; y < maxy; y++) { if (is_linetouched(win, y) == TRUE) @@ -161,6 +169,9 @@ wtouchln(WINDOW *win, int line, int n, i __CTRACE(__CTRACE_LINE, "wtouchln: (%p) %d, %d, %d\n", win, line, n, changed); + if (__predict_false(win == NULL)) + return FALSE; + if (line < 0 || win->maxy <= line) return ERR; if (n < 0) @@ -245,6 +256,9 @@ void wsyncup(WINDOW *win) { + if (__predict_false(win == NULL)) + return; + do { __touchwin(win, 0); win = win->orig; @@ -254,6 +268,9 @@ wsyncup(WINDOW *win) void wsyncdown(WINDOW *win) { + if (__predict_false(win == NULL)) + return; + WINDOW *w = win->orig; while (w) { Index: src/lib/libcurses/tty.c diff -u src/lib/libcurses/tty.c:1.50 src/lib/libcurses/tty.c:1.51 --- src/lib/libcurses/tty.c:1.50 Mon Oct 9 21:14:29 2023 +++ src/lib/libcurses/tty.c Mon Dec 23 02:58:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: tty.c,v 1.50 2023/10/09 21:14:29 blymn Exp $ */ +/* $NetBSD: tty.c,v 1.51 2024/12/23 02:58:04 blymn Exp $ */ /*- * Copyright (c) 1992, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)tty.c 8.6 (Berkeley) 1/10/95"; #else -__RCSID("$NetBSD: tty.c,v 1.50 2023/10/09 21:14:29 blymn Exp $"); +__RCSID("$NetBSD: tty.c,v 1.51 2024/12/23 02:58:04 blymn Exp $"); #endif #endif /* not lint */ @@ -497,6 +497,9 @@ qiflush(void) int intrflush(WINDOW *win, bool bf) { + if (__predict_false(win == NULL)) + return ERR; + /* Check if we need to restart ... */ if (_cursesi_screen->endwin) __restartwin();