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.
--- 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)