From 2b1d359281fa33edd881496d28eaa2c79efa317b Mon Sep 17 00:00:00 2001 From: Andrew Wood Date: Sat, 25 Apr 2026 21:03:09 +0100 Subject: [PATCH] Use pv_asprintf() to allocate fd_dir instead of having it statically sized. --- src/pv/watchpid.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/pv/watchpid.c b/src/pv/watchpid.c index 40941c6..0210767 100644 --- a/src/pv/watchpid.c +++ b/src/pv/watchpid.c @@ -471,16 +471,23 @@ int pv_watchpid_scanfds(pvstate_t state, pid_t watch_pid, int watch_fd, int *arr return -1; } #else - char fd_dir[512]; /* flawfinder: ignore - zeroed, bounded with pv_snprintf(). */ + nullable_string_ptr fd_dir = NULL; DIR *dptr; struct dirent *d; - memset(fd_dir, 0, sizeof(fd_dir)); - (void) pv_snprintf(fd_dir, sizeof(fd_dir), "/proc/%u/fd", watch_pid); + if ((pv_asprintf(&fd_dir, "/proc/%u/fd", watch_pid) < 0) || (NULL == fd_dir)) { + pv_perror("%s %u", _("pid"), watch_pid); + return 2; + } dptr = opendir(fd_dir); - if (NULL == dptr) + if (NULL == dptr) { + free(fd_dir); return 1; + } + + free(fd_dir); + fd_dir = NULL; #endif array_length = *array_length_ptr;