Always use subprocess without shell
This commit is contained in:
		
							parent
							
								
									76c7a281bb
								
							
						
					
					
						commit
						ea347093c2
					
				@ -5,6 +5,7 @@
 | 
			
		||||
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
import shlex
 | 
			
		||||
import logging
 | 
			
		||||
import threading
 | 
			
		||||
import subprocess
 | 
			
		||||
@ -108,10 +109,11 @@ class BaseApp:
 | 
			
		||||
 | 
			
		||||
    def calltx(self, cmd):
 | 
			
		||||
        bindir = self.coin_clients[Coins.PART]['bindir']
 | 
			
		||||
        command_tx = os.path.join(bindir, cfg.PARTICL_TX)
 | 
			
		||||
        chainname = '' if self.chain == 'mainnet' else (' -' + self.chain)
 | 
			
		||||
        args = command_tx + chainname + ' ' + cmd
 | 
			
		||||
        p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
 | 
			
		||||
        args = [os.path.join(bindir, cfg.PARTICL_TX), ]
 | 
			
		||||
        if self.chain != 'mainnet':
 | 
			
		||||
            args.append('-' + self.chain)
 | 
			
		||||
        args += shlex.split(cmd)
 | 
			
		||||
        p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | 
			
		||||
        out = p.communicate()
 | 
			
		||||
        if len(out[1]) > 0:
 | 
			
		||||
            raise ValueError('TX error ' + str(out[1]))
 | 
			
		||||
@ -121,9 +123,12 @@ class BaseApp:
 | 
			
		||||
        bindir = self.coin_clients[coin_type]['bindir']
 | 
			
		||||
        datadir = self.coin_clients[coin_type]['datadir']
 | 
			
		||||
        command_cli = os.path.join(bindir, chainparams[coin_type]['name'] + '-cli' + ('.exe' if os.name == 'nt' else ''))
 | 
			
		||||
        chainname = '' if self.chain == 'mainnet' else (' -' + self.chain)
 | 
			
		||||
        args = command_cli + chainname + ' ' + '-datadir=' + datadir + ' ' + params
 | 
			
		||||
        p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
 | 
			
		||||
        args = [command_cli, ]
 | 
			
		||||
        if self.chain != 'mainnet':
 | 
			
		||||
            args.append('-' + self.chain)
 | 
			
		||||
        args.append('-datadir=' + datadir)
 | 
			
		||||
        args += shlex.split(params)
 | 
			
		||||
        p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | 
			
		||||
        out = p.communicate(timeout=timeout)
 | 
			
		||||
        if len(out[1]) > 0:
 | 
			
		||||
            raise ValueError('CLI error ' + str(out[1]))
 | 
			
		||||
 | 
			
		||||
@ -1,12 +1,13 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2020 tecnovert
 | 
			
		||||
# Copyright (c) 2020-2022 tecnovert
 | 
			
		||||
# Distributed under the MIT software license, see the accompanying
 | 
			
		||||
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
import time
 | 
			
		||||
import json
 | 
			
		||||
import shlex
 | 
			
		||||
import urllib
 | 
			
		||||
import logging
 | 
			
		||||
import traceback
 | 
			
		||||
@ -129,8 +130,13 @@ def openrpc(rpc_port, auth, wallet=None, host='127.0.0.1'):
 | 
			
		||||
def callrpc_cli(bindir, datadir, chain, cmd, cli_bin='particl-cli'):
 | 
			
		||||
    cli_bin = os.path.join(bindir, cli_bin)
 | 
			
		||||
 | 
			
		||||
    args = cli_bin + ('' if chain == 'mainnet' else (' -' + chain)) + ' -datadir=' + datadir + ' ' + cmd
 | 
			
		||||
    p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
 | 
			
		||||
    args = [cli_bin, ]
 | 
			
		||||
    if chain != 'mainnet':
 | 
			
		||||
        args.append('-' + chain)
 | 
			
		||||
    args.append('-datadir=' + datadir)
 | 
			
		||||
    args += shlex.split(cmd)
 | 
			
		||||
 | 
			
		||||
    p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 | 
			
		||||
    out = p.communicate()
 | 
			
		||||
 | 
			
		||||
    if len(out[1]) > 0:
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user