From 2ee56648d98e603e2c0ff69ab8efb8cd35dccd55 Mon Sep 17 00:00:00 2001 From: peace-maker Date: Wed, 17 Jan 2024 23:57:36 +0100 Subject: [PATCH] process.close: Move closing of std fds after kill Windows processes would block on fd.close() when the main thread is suspended. --- pwnlib/tubes/process.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pwnlib/tubes/process.py b/pwnlib/tubes/process.py index af9879bd9..388a14630 100644 --- a/pwnlib/tubes/process.py +++ b/pwnlib/tubes/process.py @@ -798,15 +798,6 @@ def close(self): # First check if we are already dead self.poll() - # close file descriptors - for fd in [self.proc.stdin, self.proc.stdout, self.proc.stderr]: - if fd is not None: - try: - fd.close() - except IOError as e: - if e.errno != errno.EPIPE and e.errno != errno.EINVAL: - raise - if not self._stop_noticed: try: self.proc.kill() @@ -816,6 +807,15 @@ def close(self): except OSError: pass + # close file descriptors + for fd in [self.proc.stdin, self.proc.stdout, self.proc.stderr]: + if fd is not None: + try: + fd.close() + except IOError as e: + if e.errno != errno.EPIPE and e.errno != errno.EINVAL: + raise + def fileno(self): if not self.connected():