##// END OF EJS Templates
dirs: fix out-of-bounds access in Py3...
dirs: fix out-of-bounds access in Py3 The hack for mutating Python's variable-length integers that was ported to py3 in cb3048746dae (dirs: port PyInt code to work on Python 3, 2016-10-08) was reading from ob_digit[1] instead of ob_digit[0] for some reason. Space for ob_digit[1] would only be allocated for integers larger than 30 bits, so we ended up writing to unallocated memory. Also, we would write an integer that's 2^30 times too large, so we would never free these integers. Found by AddressSanitizer. Differential Revision: https://phab.mercurial-scm.org/D7597

File last commit:

r44232:29adf0a0 merge default
r44290:a47ccdcc default
Show More
scmwindows.py
66 lines | 1.9 KiB | text/x-python | PythonLexer
Gregory Szorc
scmwindows: use absolute_import
r27481 from __future__ import absolute_import
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 import os
Gregory Szorc
scmwindows: use absolute_import
r27481
from . import (
Pulkit Goyal
py3: replace os.environ with encoding.environ (part 4 of 5)
r30637 encoding,
Pulkit Goyal
py3: replace os.pathsep with pycompat.ospathsep...
r30612 pycompat,
Gregory Szorc
scmwindows: use absolute_import
r27481 util,
Yuya Nishihara
scmutil: move util.termwidth()...
r30309 win32,
Gregory Szorc
scmwindows: use absolute_import
r27481 )
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690
Pulkit Goyal
py3: conditionalize _winreg import...
r29760 try:
Matt Harbison
windows: suppress pytype warnings for Windows imports and functions...
r44207 import _winreg as winreg # pytype: disable=import-error
Augie Fackler
style: run a patched black on a subset of mercurial...
r43345
Pulkit Goyal
py3: conditionalize _winreg import...
r29760 winreg.CloseKey
except ImportError:
Matt Harbison
windows: suppress pytype warnings for Windows imports and functions...
r44207 # py2 only
import winreg # pytype: disable=import-error
Pulkit Goyal
py3: conditionalize _winreg import...
r29760
Yuya Nishihara
pager: use less as a fallback on Unix...
r32078 # MS-DOS 'more' is the only pager available by default on Windows.
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 fallbackpager = b'more'
Yuya Nishihara
pager: use less as a fallback on Unix...
r32078
Augie Fackler
style: run a patched black on a subset of mercurial...
r43345
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 def systemrcpath():
'''return default os-specific hgrc search path'''
rcpath = []
Yuya Nishihara
rcutil: directly call win32.executablepath()...
r37113 filename = win32.executablepath()
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 # Use mercurial.ini found in directory with hg.exe
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 progrc = os.path.join(os.path.dirname(filename), b'mercurial.ini')
Mads Kiilerich
windows: read all global config files, not just the first (issue4491) (BC)...
r26625 rcpath.append(progrc)
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 # Use hgrc.d found in directory with hg.exe
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 progrcd = os.path.join(os.path.dirname(filename), b'hgrc.d')
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 if os.path.isdir(progrcd):
Yuya Nishihara
osutil: proxy through util (and platform) modules (API)...
r32203 for f, kind in util.listdir(progrcd):
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if f.endswith(b'.rc'):
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 rcpath.append(os.path.join(progrcd, f))
# else look for a system rcpath in the registry
Augie Fackler
style: run a patched black on a subset of mercurial...
r43345 value = util.lookupreg(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 b'SOFTWARE\\Mercurial', None, winreg.HKEY_LOCAL_MACHINE
Augie Fackler
style: run a patched black on a subset of mercurial...
r43345 )
Matt Harbison
windows: fix an issue causing registry config paths to be ignored on py3...
r44186 if not isinstance(value, bytes) or not value:
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 return rcpath
value = util.localpath(value)
Pulkit Goyal
py3: replace os.pathsep with pycompat.ospathsep...
r30612 for p in value.split(pycompat.ospathsep):
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if p.lower().endswith(b'mercurial.ini'):
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 rcpath.append(p)
elif os.path.isdir(p):
Yuya Nishihara
osutil: proxy through util (and platform) modules (API)...
r32203 for f, kind in util.listdir(p):
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if f.endswith(b'.rc'):
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 rcpath.append(os.path.join(p, f))
return rcpath
Augie Fackler
style: run a patched black on a subset of mercurial...
r43345
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 def userrcpath():
'''return os-specific hgrc search path to the user dir'''
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 home = os.path.expanduser(b'~')
path = [os.path.join(home, b'mercurial.ini'), os.path.join(home, b'.hgrc')]
userprofile = encoding.environ.get(b'USERPROFILE')
Mads Kiilerich
config: don't read the same config file twice...
r22583 if userprofile and userprofile != home:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 path.append(os.path.join(userprofile, b'mercurial.ini'))
path.append(os.path.join(userprofile, b'.hgrc'))
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 return path
Yuya Nishihara
scmutil: move util.termwidth()...
r30309
Augie Fackler
style: run a patched black on a subset of mercurial...
r43345
Yuya Nishihara
scmutil: extend termwidth() to return terminal height, renamed to termsize()...
r30314 def termsize(ui):
return win32.termsize()