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();

Reply via email to