From 0a618cff2ed9bcf9ddaf7a4ffe115649ffe4527e Mon Sep 17 00:00:00 2001 From: Collin Funk Date: Fri, 24 Jan 2025 21:36:11 -0800 Subject: [PATCH] ptsname_r: Work around ptsname_r bug on Solaris 11 OmniOS. * lib/ptsname_r.c (ptsname_r): Ensure the resulting buffer is not clobbered if it is too small on Solaris 11 OmniOS. * m4/ptsname_r.m4 (gl_FUNC_PTSNAME_R): On Solaris 11 OmniOS, arrange to override ptsname_r. * doc/posix-functions/ptsname_r.texi: Document the bug. --- ChangeLog | 9 +++++++++ doc/posix-functions/ptsname_r.texi | 2 +- lib/ptsname_r.c | 2 +- m4/ptsname_r.m4 | 6 ++++-- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index f24030d398..58a68021de 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2025-01-24 Collin Funk + + ptsname_r: Work around ptsname_r bug on Solaris 11 OmniOS. + * lib/ptsname_r.c (ptsname_r): Ensure the resulting buffer is not + clobbered if it is too small on Solaris 11 OmniOS. + * m4/ptsname_r.m4 (gl_FUNC_PTSNAME_R): On Solaris 11 OmniOS, arrange to + override ptsname_r. + * doc/posix-functions/ptsname_r.texi: Document the bug. + 2025-01-24 Collin Funk strerrorname_np: Work around a bug on Solaris 11 OmniOS. diff --git a/doc/posix-functions/ptsname_r.texi b/doc/posix-functions/ptsname_r.texi index 1b50cc1378..5237f6a378 100644 --- a/doc/posix-functions/ptsname_r.texi +++ b/doc/posix-functions/ptsname_r.texi @@ -34,7 +34,7 @@ macOS 14, FreeBSD 14.0, Android 4.3. @item When this function fails with ERANGE, it stores an empty string as result on some platforms: -NetBSD 10.0. +NetBSD 10.0, Solaris 11 OmniOS. @end itemize Portability problems not fixed by Gnulib: diff --git a/lib/ptsname_r.c b/lib/ptsname_r.c index e2d9059088..3452afb844 100644 --- a/lib/ptsname_r.c +++ b/lib/ptsname_r.c @@ -68,7 +68,7 @@ ptsname_r (int fd, char *buf, size_t buflen) #undef ptsname_r { #if HAVE_ESSENTIALLY_WORKING_PTSNAME_R -# if defined __NetBSD__ +# if defined __NetBSD__ || defined __sun char tmpbuf[32]; if (buf == NULL) return EINVAL; diff --git a/m4/ptsname_r.m4 b/m4/ptsname_r.m4 index 36409fddf7..5cd6f91a07 100644 --- a/m4/ptsname_r.m4 +++ b/m4/ptsname_r.m4 @@ -1,5 +1,5 @@ # ptsname_r.m4 -# serial 10 +# serial 11 dnl Copyright (C) 2010-2025 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -79,8 +79,10 @@ main (void) dnl result buffer. We don't use an AC_RUN_IFELSE test here, because dnl while the bug exists on all platforms, only NetBSD/i386 has the dnl files /dev/ptyp[01] on which the bug becomes apparent. + dnl + dnl On Solaris 11 OmniOS the result buffer is clobbered as well. case "$host_os" in - netbsd*) REPLACE_PTSNAME_R=1 ;; + netbsd* | solaris*) REPLACE_PTSNAME_R=1 ;; esac fi fi -- 2.39.5