From 0509e130e86f67853fc4b680d290eb613721ad25 Mon Sep 17 00:00:00 2001 From: datacarismo Date: Sun, 21 Jun 2026 06:58:32 -0600 Subject: [PATCH] Fix leaked DIR* handle in generatedEntryIndex() Wrap opendir() result in std::unique_ptr with closedir deleter to ensure the directory handle is always released, preventing a file descriptor leak on every call. Also add a null check for the case where opendir() fails. --- src/cb/src/clipboard.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/cb/src/clipboard.cpp b/src/cb/src/clipboard.cpp index 80dda4a36..8e0280a1e 100644 --- a/src/cb/src/clipboard.cpp +++ b/src/cb/src/clipboard.cpp @@ -15,6 +15,7 @@ along with this program. If not, see .*/ #include "clipboard.hpp" #include +#include #include Clipboard::Clipboard(const std::string& clipboard_name, const unsigned long& clipboard_entry) { @@ -64,6 +65,12 @@ std::deque Clipboard::generatedEntryIndex() { fs::create_directories(entriesDir); #if defined(UNIX_OR_UNIX_LIKE) auto dirptr = opendir(entriesDir.string().data()); + if (!dirptr) { + if (pathNames.empty()) pathNames.emplace_back(0); + std::sort(pathNames.begin(), pathNames.end(), std::greater<>()); + return pathNames; + } + std::unique_ptr dir_guard(dirptr, &closedir); errno = 0; for (auto* dir = readdir(dirptr); dir != nullptr; dir = readdir(dirptr), errno = 0) { pathNames.emplace_back(0);