[PATCH in main] vfs: use fchmod for _fixfilemode

Adrian Buehlmann adrian at cadifra.com
Fri Oct 12 17:33:25 CDT 2012


On 2012-10-13 00:21, Adrian Buehlmann wrote:
> On 2012-10-13 00:19, Adrian Buehlmann wrote:
>> # HG changeset patch
>> # User Matt Mackall <mpm at selenic.com>
>> # Date 1350014314 18000
>> # Node ID 76b73ce0ffaca8b562747564ce89f4798b2275e5
>> # Parent  4871c1f343fae9f38b9dc9600ab96f2017d116ce
>> 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.
>>
>> diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py
>> --- a/mercurial/scmutil.py
>> +++ b/mercurial/scmutil.py
>> @@ -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)
> 
> http://docs.python.org/library/os.html#os.fchmod
> 
> """
> os.fchmod(fd, mode)
> Change the mode of the file given by fd to the numeric mode. See the
> docs for chmod() for possible values of mode.
> 
> Availability: Unix.
> 
> New in version 2.6.
> """

A fix for Windows seems easy, but what about Python 2.4 and 2.5?


More information about the Mercurial-devel mailing list