mirror of
https://github.com/sshuttle/sshuttle.git
synced 2025-01-01 03:29:38 +01:00
Fix potential deadlock condition in nft_get_handle
This was susceptible to the same deadlock issue that ipt_chain_exists
had and was fixed in d43db80
where if the command returned a significant
amount of output, it wouldn't all be read in, resulting in the
subprocess hanging waiting for the output to be read.
This commit is contained in:
parent
04849df7e3
commit
0e99adc5d1
@ -74,13 +74,13 @@ def nft_get_handle(expression, chain):
|
||||
'PATH': os.environ['PATH'],
|
||||
'LC_ALL': "C",
|
||||
}
|
||||
p = ssubprocess.Popen(argv, stdout=ssubprocess.PIPE, env=env)
|
||||
for line in p.stdout:
|
||||
if (b'jump %s' % chain.encode('utf-8')) in line:
|
||||
return re.sub('.*# ', '', line.decode('utf-8'))
|
||||
rv = p.wait()
|
||||
if rv:
|
||||
raise Fatal('%r returned %d' % (argv, rv))
|
||||
try:
|
||||
output = ssubprocess.check_output(argv, env=env)
|
||||
for line in output.decode('utf-8').split('\n'):
|
||||
if ('jump %s' % chain) in line:
|
||||
return re.sub('.*# ', '', line)
|
||||
except ssubprocess.CalledProcessError as e:
|
||||
raise Fatal('%r returned %d' % (argv, e.returncode))
|
||||
|
||||
|
||||
_no_ttl_module = False
|
||||
|
Loading…
Reference in New Issue
Block a user