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
+2 -1
View File
@@ -372,7 +372,7 @@ PIVector<PIFile::FileInfo> PIDir::entries(const PIRegularExpression & regexp) {
closedir(dir); closedir(dir);
} }
# else # else
dirent ** list; dirent ** list = nullptr;
int cnt = scandir(p.data(), int cnt = scandir(p.data(),
&list, &list,
0, 0,
@@ -381,6 +381,7 @@ PIVector<PIFile::FileInfo> PIDir::entries(const PIRegularExpression & regexp) {
# else # else
versionsort); versionsort);
# endif # endif
if (cnt < 0) return ret;
for (int i = 0; i < cnt; ++i) { for (int i = 0; i < cnt; ++i) {
ret << PIFile::fileInfo(dp + PIString(list[i]->d_name)); ret << PIFile::fileInfo(dp + PIString(list[i]->d_name));
free(list[i]); free(list[i]);