From 04a69a18254e32073e4904ff77254dea9866bc7a Mon Sep 17 00:00:00 2001
From: Iustin Pop <iustin@google.com>
Date: Fri, 5 Mar 2010 11:52:32 +0100
Subject: [PATCH] ListVisibleFiles: require normalized path names

This patch changes ListVisibleFiles to raise ProgrammerError if it's
passed a non-absolute/non-normalized path name, and adds unittests for
this behaviour.

Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Michael Hanselmann <hansmi@google.com>
---
 lib/utils.py                  | 4 ++++
 test/ganeti.utils_unittest.py | 7 +++++++
 2 files changed, 11 insertions(+)

diff --git a/lib/utils.py b/lib/utils.py
index efd736ad0..52b799fe5 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 550bf2503..aad16c101 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"""
-- 
GitLab