From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6657041487194226688 X-Received: by 2002:aa7:c393:: with SMTP id k19mr361691edq.6.1549963256967; Tue, 12 Feb 2019 01:20:56 -0800 (PST) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a50:b656:: with SMTP id c22ls4094730ede.0.gmail; Tue, 12 Feb 2019 01:20:55 -0800 (PST) X-Google-Smtp-Source: AHgI3IZ5kq1znfKUa41dasSgaYZP8vAPJDsmURhiHH+4L6rOHXaa3hFvbPQqDgDagGiiYLo9+N9o X-Received: by 2002:a50:ba8e:: with SMTP id x14mr349580ede.9.1549963255910; Tue, 12 Feb 2019 01:20:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549963255; cv=none; d=google.com; s=arc-20160816; b=QN2eqI7OUtyU0NDf6koQw3wwXfaiH4T8VILmLHA6uVisXcvFWcfD6/F0pjxXXC5SqJ CyCsj01HBbQl033NBjGoTkm6KVoSGkXmQR/9TnzhJ22ytq6hs2p7MlfN4vOatd5C2P+B FanZgB8jnQx3UB1m4ZzehDzaRIHLO8JkkOndy4tludEoK+Sr0ut7/JUenxaWgTByRmOr 44In7un3jyNxb27kQwqf1xxXsEWVUbHgB2zr7XhxADyHHEB6c54tVMzjOuhH5pqZak1f 08HI8mkqfGI17N2i8XHH7skSEHCO0ZUIzRsxiL/UDs5wtWR8xlQY6sR5OG0JX9waXT4B rO4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=E8348W46FkxJNsO14/6S1jkr1p+CM6YIWGVwdSH+U7U=; b=Bcq07bcLXayrlL9Oa+h2jteYsU6k9QPouaoaozxyifaXEn6wAMczhaViXRYAVFC3U6 +CXL1CYrsi5WJX0RCYVdkb0/9Z8h9HM6CVcotLhCO1SnHqPFW0MOcqyAtnL36yetUv3X /ZV3UbQJJ2JTDZUklGFBmVJ2FEu3YSaQTyE/5owhcCsYRjB3b2fl1b9C77Nz747snDDQ PRe3JQx5aEn2qQl2SgPzPv8kWCtol3BzoBWaq7tPJnR2m9tp1k1HmvTSQxJKXIRZeEAg 8/lNKrATSAFjKLvwI2piVCqHt+ndZoHUcyR/lr6niLzR5ql8UhVhzKxW9Dguci+XXXag RZWQ== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=neutral (google.com: 212.18.0.10 is neither permitted nor denied by best guess record for domain of hws@denx.de) smtp.mailfrom=hws@denx.de Return-Path: Received: from mail-out.m-online.net (mail-out.m-online.net. [212.18.0.10]) by gmr-mx.google.com with ESMTPS id u9si278155edp.1.2019.02.12.01.20.55 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Feb 2019 01:20:55 -0800 (PST) Received-SPF: neutral (google.com: 212.18.0.10 is neither permitted nor denied by best guess record for domain of hws@denx.de) client-ip=212.18.0.10; Authentication-Results: gmr-mx.google.com; spf=neutral (google.com: 212.18.0.10 is neither permitted nor denied by best guess record for domain of hws@denx.de) smtp.mailfrom=hws@denx.de Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 43zHFg4Ywvz1r0gl; Tue, 12 Feb 2019 10:20:55 +0100 (CET) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 43zHFg4KcZz1qvWn; Tue, 12 Feb 2019 10:20:55 +0100 (CET) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new, port 10024) with ESMTP id 6sGQC1812FEB; Tue, 12 Feb 2019 10:20:54 +0100 (CET) X-Auth-Info: GOpecDFu4dSY2o2Xr6HcH4BNZDks7Vrh72K1dKOaUTw= Received: from sandvich.fritz.box (p578a821c.dip0.t-ipconnect.de [87.138.130.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPSA; Tue, 12 Feb 2019 10:20:53 +0100 (CET) From: Harald Seiler To: isar-users@googlegroups.com Cc: Claudius Heine Subject: [PATCH 1/4] Remove all uses of subprocess.call(shell=True) Date: Tue, 12 Feb 2019 10:20:43 +0100 Message-Id: <20190212092046.6508-2-hws@denx.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190212092046.6508-1-hws@denx.de> References: <20190212092046.6508-1-hws@denx.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TUID: L3j3B4XbzRi3 Using shell-expansion in subprocess calls has a lot of nasty side-effects that are hard to debug should one ever surface. This commit changes all uses of subprocess to A) not use shell=True by giving a list of args instead of a command-line. B) ensure return-codes are handled appropriately. Furthermore, in some places the subprocess usage was changed to be more idiomatic. Co-authored-by: Claudius Heine Signed-off-by: Harald Seiler --- meta/classes/base.bbclass | 10 ++++++---- meta/classes/image.bbclass | 9 +++++---- meta/classes/isar-bootstrap-helper.bbclass | 9 ++++----- meta/classes/isar-events.bbclass | 13 +++++++------ meta/classes/patch.bbclass | 16 ++++++++++++---- 5 files changed, 34 insertions(+), 23 deletions(-) diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass index 6ca93bf..6fcf452 100644 --- a/meta/classes/base.bbclass +++ b/meta/classes/base.bbclass @@ -170,15 +170,17 @@ addtask clean do_clean[nostamp] = "1" python do_clean() { import subprocess + import glob for f in (d.getVar('CLEANFUNCS', True) or '').split(): bb.build.exec_func(f, d) - dir = d.expand("${WORKDIR}") - subprocess.call('sudo rm -rf ' + dir, shell=True) + workdir = d.expand("${WORKDIR}") + subprocess.check_call(["sudo", "rm", "-rf", workdir]) - dir = "%s.*" % bb.data.expand(d.getVar('STAMP', False), d) - subprocess.call('sudo rm -rf ' + dir, shell=True) + stamppath = bb.data.expand(d.getVar('STAMP', False), d) + stampdirs = glob.glob(stamppath + ".*") + subprocess.check_call(["sudo", "rm", "-rf"] + stampdirs) } # Derived from OpenEmbedded Core: meta/classes/base.bbclass diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index be00817..930c245 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -27,16 +27,17 @@ def get_image_name(d, name_link): full = d.getVar("IMAGE_FULLNAME", True) + "." + base return [base, full] if os.path.islink(path_link): - return get_image_name(d, os.path.relpath(os.path.realpath(path_link), - '/')) + return get_image_name(d, os.path.relpath(os.path.realpath(path_link), '/')) + return ["", ""] def get_rootfs_size(d): import subprocess rootfs_extra = int(d.getVar("ROOTFS_EXTRA", True)) - output = subprocess.check_output(['sudo', 'du', '-s', '--block-size=1k', - d.getVar("IMAGE_ROOTFS", True)]) + output = subprocess.check_output( + ['sudo', 'du', '-s', '--block-size=1k', d.getVar("IMAGE_ROOTFS", True)] + ) base_size = int(output.split()[0]) return base_size + rootfs_extra * 1024 diff --git a/meta/classes/isar-bootstrap-helper.bbclass b/meta/classes/isar-bootstrap-helper.bbclass index d780b85..3e11098 100644 --- a/meta/classes/isar-bootstrap-helper.bbclass +++ b/meta/classes/isar-bootstrap-helper.bbclass @@ -9,11 +9,10 @@ IMAGE_TRANSIENT_PACKAGES ??= "" def get_deb_host_arch(): import subprocess - host_arch = subprocess.Popen("dpkg --print-architecture", - shell=True, - env=os.environ, - stdout=subprocess.PIPE - ).stdout.read().decode('utf-8').strip() + host_arch = subprocess.check_output( + ["dpkg", "--print-architecture"], + encoding="utf-8", + ).strip() return host_arch #Debian Distribution for SDK host diff --git a/meta/classes/isar-events.bbclass b/meta/classes/isar-events.bbclass index c4a6149..a178d05 100644 --- a/meta/classes/isar-events.bbclass +++ b/meta/classes/isar-events.bbclass @@ -16,13 +16,14 @@ python isar_handler() { basepath = tmpdir + '/work/' - with open(os.devnull, 'w') as devnull: - with open('/proc/mounts', 'rU') as f: - lines = f.readlines() - for line in lines: + with open('/proc/mounts') as f: + for line in f.readlines(): if basepath in line: - subprocess.call('sudo umount -l ' + line.split()[1], - stdout=devnull, stderr=devnull, shell=True) + subprocess.call( + ["sudo", "umount", "-l", line.split()[1]], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) } isar_handler[eventmask] = "bb.runqueue.runQueueExitWait bb.event.BuildCompleted" diff --git a/meta/classes/patch.bbclass b/meta/classes/patch.bbclass index 0bc449f..9d4441d 100644 --- a/meta/classes/patch.bbclass +++ b/meta/classes/patch.bbclass @@ -21,10 +21,18 @@ python do_patch() { striplevel = fetcher.ud[src_uri].parm.get("striplevel") or "1" - cmd = "patch --no-backup-if-mismatch -p " + striplevel + \ - " --directory " + src_dir + " --input " + workdir + basename - bb.note(cmd) - if subprocess.call(cmd, shell=True) != 0: + cmd = [ + "patch", + "--no-backup-if-mismatch", + "-p", + striplevel, + "--directory", + src_dir, + "--input", + workdir + basename, + ] + bb.note(" ".join(cmd)) + if subprocess.call(cmd) != 0: bb.fatal("patching failed") except bb.fetch2.BBFetchException as e: raise bb.build.FuncFailed(e) -- 2.14.1