summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2011-01-13 23:22:17 +0100
committerDavid Kalnischkies <kalnischkies@gmail.com>2011-01-13 23:22:17 +0100
commit491058e3570ec66769c4e7e9797f549c6d724848 (patch)
treecbd2eb94617df160e821de3858b4f441666a7894
parentc55b8a54780c4db6a5fa270ddd2d05ab837f6ffb (diff)
ignore non-regular files in GetListOfFilesInDir (Closes: #594694)
-rw-r--r--apt-pkg/contrib/fileutl.cc28
-rw-r--r--debian/changelog3
-rwxr-xr-xtest/libapt/run-tests5
3 files changed, 23 insertions, 13 deletions
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc
index db6057ea3..52f517ee0 100644
--- a/apt-pkg/contrib/fileutl.cc
+++ b/apt-pkg/contrib/fileutl.cc
@@ -336,6 +336,20 @@ std::vector<string> GetListOfFilesInDir(string const &Dir, std::vector<string> c
if (Ent->d_name[0] == '.')
continue;
+ // Make sure it is a file and not something else
+ string const File = flCombine(Dir,Ent->d_name);
+#ifdef _DIRENT_HAVE_D_TYPE
+ if (Ent->d_type != DT_REG)
+#endif
+ {
+ if (RealFileExists(File.c_str()) == false)
+ {
+ if (SilentIgnore.Match(Ent->d_name) == false)
+ _error->Notice(_("Ignoring '%s' in directory '%s' as it is not a regular file"), Ent->d_name, Dir.c_str());
+ continue;
+ }
+ }
+
// check for accepted extension:
// no extension given -> periods are bad as hell!
// extensions given -> "" extension allows no extension
@@ -349,7 +363,7 @@ std::vector<string> GetListOfFilesInDir(string const &Dir, std::vector<string> c
if (Debug == true)
std::clog << "Bad file: " << Ent->d_name << " → no extension" << std::endl;
if (SilentIgnore.Match(Ent->d_name) == false)
- _error->Notice("Ignoring file '%s' in directory '%s' as it has no filename extension", Ent->d_name, Dir.c_str());
+ _error->Notice(_("Ignoring file '%s' in directory '%s' as it has no filename extension"), Ent->d_name, Dir.c_str());
continue;
}
}
@@ -358,7 +372,7 @@ std::vector<string> GetListOfFilesInDir(string const &Dir, std::vector<string> c
if (Debug == true)
std::clog << "Bad file: " << Ent->d_name << " → bad extension »" << flExtension(Ent->d_name) << "«" << std::endl;
if (SilentIgnore.Match(Ent->d_name) == false)
- _error->Notice("Ignoring file '%s' in directory '%s' as it has an invalid filename extension", Ent->d_name, Dir.c_str());
+ _error->Notice(_("Ignoring file '%s' in directory '%s' as it has an invalid filename extension"), Ent->d_name, Dir.c_str());
continue;
}
}
@@ -391,16 +405,6 @@ std::vector<string> GetListOfFilesInDir(string const &Dir, std::vector<string> c
continue;
}
- // Make sure it is a file and not something else
- string const File = flCombine(Dir,Ent->d_name);
- struct stat St;
- if (stat(File.c_str(),&St) != 0 || S_ISREG(St.st_mode) == 0)
- {
- if (Debug == true)
- std::clog << "Bad file: " << Ent->d_name << " → stat says not a good file" << std::endl;
- continue;
- }
-
if (Debug == true)
std::clog << "Accept file: " << Ent->d_name << " in " << Dir << std::endl;
List.push_back(File);
diff --git a/debian/changelog b/debian/changelog
index febd259c0..ca5d4f235 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -20,6 +20,7 @@ apt (0.8.11+wheezy) unstable; urgency=low
* apt-pkg/contrib/fileutl.cc:
- add a RealFileExists method and check that your configuration files
are real files to avoid endless loops if not (Closes: #604401)
+ - ignore non-regular files in GetListOfFilesInDir (Closes: #594694)
* apt-pkg/contrib/weakptr.h:
- include stddefs.h to fix compile error (undefined NULL) with gcc-4.6
* methods/https.cc:
@@ -35,7 +36,7 @@ apt (0.8.11+wheezy) unstable; urgency=low
* apt-pkg/cacheiterator.h:
- do not segfault if cache is not build (Closes: #254770)
- -- David Kalnischkies <kalnischkies@gmail.com> Thu, 13 Jan 2011 17:10:36 +0100
+ -- David Kalnischkies <kalnischkies@gmail.com> Thu, 13 Jan 2011 23:19:03 +0100
apt (0.8.10) unstable; urgency=low
diff --git a/test/libapt/run-tests b/test/libapt/run-tests
index f5fc03446..a66de386d 100755
--- a/test/libapt/run-tests
+++ b/test/libapt/run-tests
@@ -39,6 +39,11 @@ do
"${tmppath}/invälid.conf" \
"${tmppath}/invalíd" \
"${tmppath}/01invalíd"
+ mkdir "${tmppath}/invaliddir" \
+ "${tmppath}/directory.conf" \
+ "${tmppath}/directory.list" \
+ "${tmppath}/directory.wron" \
+ "${tmppath}/directory.list.disabled"
ln -s "${tmppath}/anormalfile" "${tmppath}/linkedfile.list"
ln -s "${tmppath}/non-existing-file" "${tmppath}/brokenlink.list"
elif [ $name = "getLanguages${EXT}" ]; then