diff --git a/mercurial/filelog.py b/mercurial/filelog.py
index 27e2317efe89f995b14d1521c476e5d6cc1ee49b_bWVyY3VyaWFsL2ZpbGVsb2cucHk=..58ec36686f0e8a5f419658bae219a63af5345b5c_bWVyY3VyaWFsL2ZpbGVsb2cucHk= 100644
--- a/mercurial/filelog.py
+++ b/mercurial/filelog.py
@@ -64,6 +64,8 @@
         node = self.node(rev)
         if self.renamed(node):
             return len(self.read(node))
+        if self._iscensored(rev):
+            return 0
 
         # XXX if self.read(node).startswith("\1\n"), this returns (size+4)
         return super(filelog, self).size(rev)
@@ -82,6 +84,10 @@
         if samehashes:
             return False
 
+        # censored files compare against the empty file
+        if self._iscensored(node):
+            return text != ''
+
         # renaming a file produces a different hash, even if the data
         # remains unchanged. Check if it's the case (slow):
         if self.renamed(node):
@@ -100,3 +106,11 @@
 
     def _file(self, f):
         return filelog(self.opener, f)
+
+    def _iscensored(self, revornode):
+        """Check if a file revision is censored."""
+        try:
+            self.revision(revornode)
+            return False
+        except error.CensoredNodeError:
+            return True