fix(PIDir): initialize list pointer and check scandir return

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.
This commit is contained in:
2026-08-06 17:01:30 +03:00
committed by andrey
parent 3e72f4e533
commit 4d9cd20ac5
+6 -5
View File
@@ -372,15 +372,16 @@ PIVector<PIFile::FileInfo> 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]);