D11928: procutil: avoid an uninitialized variable usage on tempfile exception
mharbison72 (Matt Harbison)
phabricator at mercurial-scm.org
Wed Dec 15 20:47:44 UTC 2021
mharbison72 created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.
REVISION SUMMARY
If `pycompat.unnamedtempfile()` raises an exception, it would have called
`stdin.close()` in the `finally` block without it being initialized first.
REPOSITORY
rHG Mercurial
BRANCH
default
REVISION DETAIL
https://phab.mercurial-scm.org/D11928
AFFECTED FILES
mercurial/utils/procutil.py
CHANGE DETAILS
diff --git a/mercurial/utils/procutil.py b/mercurial/utils/procutil.py
--- a/mercurial/utils/procutil.py
+++ b/mercurial/utils/procutil.py
@@ -742,6 +742,8 @@
start_new_session = False
ensurestart = True
+ stdin = None
+
try:
if stdin_bytes is None:
stdin = subprocess.DEVNULL
@@ -770,7 +772,7 @@
record_wait(255)
raise
finally:
- if stdin_bytes is not None:
+ if stdin_bytes is not None and stdin is not None:
assert not isinstance(stdin, int)
stdin.close()
if not ensurestart:
@@ -852,6 +854,8 @@
return
returncode = 255
+ stdin = None
+
try:
if record_wait is None:
# Start a new session
@@ -894,7 +898,8 @@
finally:
# mission accomplished, this child needs to exit and not
# continue the hg process here.
- stdin.close()
+ if stdin is not None:
+ stdin.close()
if record_wait is None:
os._exit(returncode)
To: mharbison72, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
More information about the Mercurial-devel
mailing list