From cd90f92deb88b78fd9b4fb2c1bd287c605292c51 Mon Sep 17 00:00:00 2001 From: "andrey.bychkov" Date: Thu, 6 Aug 2026 10:18:57 +0300 Subject: [PATCH] fix(PIDir): initialize list pointer and check scandir return MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dirent** list was uninitialized, so scandir failure (returning -1) left it with indeterminate value. The unconditional free(list) at the end was then UB — typically heap corruption or crash. --- libs/main/io_devices/pidir.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libs/main/io_devices/pidir.cpp b/libs/main/io_devices/pidir.cpp index bb0607b4..6aabe59d 100644 --- a/libs/main/io_devices/pidir.cpp +++ b/libs/main/io_devices/pidir.cpp @@ -372,15 +372,16 @@ PIVector PIDir::entries(const PIRegularExpression & regexp) { closedir(dir); } # else - dirent ** list; - int cnt = scandir(p.data(), - &list, - 0, + dirent ** list = nullptr; + int cnt = scandir(p.data(), + &list, + 0, # if defined(MAC_OS) || defined(ANDROID) || defined(BLACKBERRY) - alphasort); + alphasort); # else versionsort); # endif + if (cnt < 0) return ret; for (int i = 0; i < cnt; ++i) { ret << PIFile::fileInfo(dp + PIString(list[i]->d_name)); free(list[i]);