diff --git a/lib/utils.py b/lib/utils.py index efd736ad0bdc7ab99fe04822e34321bf174a6b7a..52b799fe5387e974a1a5d4da6657d6ff286772f2 100644 --- a/lib/utils.py +++ b/lib/utils.py @@ -1221,8 +1221,12 @@ def ListVisibleFiles(path): @param path: the directory to enumerate @rtype: list @return: the list of all files not starting with a dot + @raise ProgrammerError: if L{path} is not an absolue and normalized path """ + if not IsNormAbsPath(path): + raise errors.ProgrammerError("Path passed to ListVisibleFiles is not" + " absolute/normalized: '%s'" % path) files = [i for i in os.listdir(path) if not i.startswith(".")] files.sort() return files diff --git a/test/ganeti.utils_unittest.py b/test/ganeti.utils_unittest.py index 550bf25034ea68885d0cb9c543c5f7ee93e8062a..aad16c101df4b556a8c0a9c19ee35dab862e09dd 100755 --- a/test/ganeti.utils_unittest.py +++ b/test/ganeti.utils_unittest.py @@ -897,6 +897,13 @@ class TestListVisibleFiles(unittest.TestCase): expected = ["a", "b"] self._test(files, expected) + def testNonAbsolutePath(self): + self.failUnlessRaises(errors.ProgrammerError, ListVisibleFiles, "abc") + + def testNonNormalizedPath(self): + self.failUnlessRaises(errors.ProgrammerError, ListVisibleFiles, + "/bin/../tmp") + class TestNewUUID(unittest.TestCase): """Test case for NewUUID"""