SF bug #453515:  filecmp.dircmp case sensitivity bug
diff --git a/Lib/filecmp.py b/Lib/filecmp.py
index 321ae0c..089c667 100644
--- a/Lib/filecmp.py
+++ b/Lib/filecmp.py
@@ -12,7 +12,7 @@
 import os
 import stat
 import warnings
-from itertools import ifilter, ifilterfalse
+from itertools import ifilter, ifilterfalse, imap, izip
 
 __all__ = ["cmp","dircmp","cmpfiles"]
 
@@ -135,11 +135,11 @@
         self.right_list.sort()
 
     def phase1(self): # Compute common names
-        b = dict.fromkeys(self.right_list)
-        common = dict.fromkeys(ifilter(b.has_key, self.left_list))
-        self.left_only = list(ifilterfalse(common.has_key, self.left_list))
-        self.right_only = list(ifilterfalse(common.has_key, self.right_list))
-        self.common = common.keys()
+        a = dict(izip(imap(os.path.normcase, self.left_list), self.left_list))
+        b = dict(izip(imap(os.path.normcase, self.right_list), self.right_list))
+        self.common = map(a.__getitem__, ifilter(b.has_key, a))
+        self.left_only = map(a.__getitem__, ifilterfalse(b.has_key, a))
+        self.right_only = map(b.__getitem__, ifilterfalse(a.has_key, b))
 
     def phase2(self): # Distinguish files, directories, funnies
         self.common_dirs = []
diff --git a/Lib/test/test_filecmp.py b/Lib/test/test_filecmp.py
index 0e5f297..b433ecc 100644
--- a/Lib/test/test_filecmp.py
+++ b/Lib/test/test_filecmp.py
@@ -49,7 +49,11 @@
         data = 'Contents of file go here.\n'
         for dir in [self.dir, self.dir_same, self.dir_diff]:
             os.mkdir(dir)
-            output = open(os.path.join(dir, 'file'), 'w')
+            if dir is self.dir_same:
+                fn = 'FiLe'     # Verify case-insensitive comparison
+            else:
+                fn = 'file'
+            output = open(os.path.join(dir, fn), 'w')
             output.write(data)
             output.close()
 
@@ -93,7 +97,7 @@
     def test_dircmp(self):
         # Check attributes for comparison of two identical directories
         d = filecmp.dircmp(self.dir, self.dir_same)
-        self.failUnless(d.left_list == d.right_list == ['file'])
+        self.assertEqual([d.left_list, d.right_list],[['file'], ['FiLe']])
         self.failUnless(d.common == ['file'])
         self.failUnless(d.left_only == d.right_only == [])
         self.failUnless(d.same_files == ['file'])