[pacman-dev] [PATCH 5/5] check_pkg_fast: check file type

Andrew Gregory andrew.gregory.8 at gmail.com
Thu Jun 26 12:52:59 EDT 2014


Signed-off-by: Andrew Gregory <andrew.gregory.8 at gmail.com>
---
 src/pacman/check.c                             | 15 +++++++++++++--
 test/pacman/tests/querycheck_fast_file_type.py |  2 --
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/pacman/check.c b/src/pacman/check.c
index 60a038a..7109c7a 100644
--- a/src/pacman/check.c
+++ b/src/pacman/check.c
@@ -210,14 +210,25 @@ int check_pkg_fast(alpm_pkg_t *pkg)
 		const alpm_file_t *file = filelist->files + i;
 		struct stat st;
 		const char *path = file->name;
+		size_t plen = strlen(path);
 
-		if(rootlen + 1 + strlen(path) > PATH_MAX) {
+		if(rootlen + 1 + plen > PATH_MAX) {
 			pm_printf(ALPM_LOG_WARNING, _("path too long: %s%s\n"), root, path);
 			continue;
 		}
 		strcpy(filepath + rootlen, path);
 
-		errors += check_file_exists(pkgname, filepath, &st);
+		if(check_file_exists(pkgname, filepath, &st) == 0) {
+			int expect_dir = path[plen - 1] == '/' ? 1 : 0;
+			int is_dir = S_ISDIR(st.st_mode) ? 1 : 0;
+			if(expect_dir != is_dir) {
+				pm_printf(ALPM_LOG_WARNING, _("%s: %s (File type mismatch)\n"),
+						pkgname, filepath);
+				++errors;
+			}
+		} else {
+			++errors;
+		}
 	}
 
 	if(!config->quiet) {
diff --git a/test/pacman/tests/querycheck_fast_file_type.py b/test/pacman/tests/querycheck_fast_file_type.py
index a19fcee..f53bada 100644
--- a/test/pacman/tests/querycheck_fast_file_type.py
+++ b/test/pacman/tests/querycheck_fast_file_type.py
@@ -10,5 +10,3 @@
 
 self.addrule("PACMAN_RETCODE=1")
 self.addrule("PACMAN_OUTPUT=warning.*(File type mismatch)")
-
-self.expectfailure = True
-- 
2.0.0



More information about the pacman-dev mailing list