vfs: use fchmod for _fixfilemode
authorMatt Mackall <mpm@selenic.com>
Thu, 11 Oct 2012 22:58:34 -0500
changeset 17752 76b73ce0ffac
parent 17751 4871c1f343fa
child 17753 69d5078d760d
vfs: use fchmod for _fixfilemode On general principle, we should use fchmod instead of chmod to avoid security pitfalls, although none is likely possible here.
mercurial/scmutil.py
--- a/mercurial/scmutil.py	Thu Oct 11 16:05:14 2012 -0700
+++ b/mercurial/scmutil.py	Thu Oct 11 22:58:34 2012 -0500
@@ -255,10 +255,10 @@
     def _cansymlink(self):
         return util.checklink(self.base)
 
-    def _fixfilemode(self, name):
+    def _fixfilemode(self, fp):
         if self.createmode is None:
             return
-        os.chmod(name, self.createmode & 0666)
+        os.fchmod(fp.fileno(), self.createmode & 0666)
 
     def __call__(self, path, mode="r", text=False, atomictemp=False):
         if self._audit:
@@ -305,7 +305,7 @@
                     util.rename(util.mktempcopy(f), f)
         fp = util.posixfile(f, mode)
         if nlink == 0:
-            self._fixfilemode(f)
+            self._fixfilemode(fp)
         return fp
 
     def symlink(self, src, dst):
@@ -329,8 +329,8 @@
         else:
             f = self(dst, "w")
             f.write(src)
+            self._fixfilemode(f)
             f.close()
-            self._fixfilemode(dst)
 
     def audit(self, path):
         self.auditor(path)