Merge pull request #90562 from bruvzg/fix_links

[Unix / DirAccess] Fix removing directory symlinks with `remove`, ensure `erase_contents_recursive` is not following directory symlinks.
This commit is contained in:
Rémi Verschelde 2024-04-15 10:00:22 +02:00
commit 50fd380359
No known key found for this signature in database
GPG key ID: C3336907360768E1
2 changed files with 3 additions and 3 deletions

View file

@ -84,7 +84,7 @@ static Error _erase_recursive(DirAccess *da) {
String n = da->get_next();
while (!n.is_empty()) {
if (n != "." && n != "..") {
if (da->current_is_dir()) {
if (da->current_is_dir() && !da->is_link(n)) {
dirs.push_back(n);
} else {
files.push_back(n);

View file

@ -419,7 +419,7 @@ Error DirAccessUnix::remove(String p_path) {
return FAILED;
}
if (S_ISDIR(flags.st_mode)) {
if (S_ISDIR(flags.st_mode) && !is_link(p_path)) {
return ::rmdir(p_path.utf8().get_data()) == 0 ? OK : FAILED;
} else {
return ::unlink(p_path.utf8().get_data()) == 0 ? OK : FAILED;
@ -435,7 +435,7 @@ bool DirAccessUnix::is_link(String p_file) {
struct stat flags = {};
if ((lstat(p_file.utf8().get_data(), &flags) != 0)) {
return FAILED;
return false;
}
return S_ISLNK(flags.st_mode);