[llvm] r369309 - [lit] Check for accidental external command calls

Joel E. Denny via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 19 15:59:37 PDT 2019


Author: jdenny
Date: Mon Aug 19 15:59:37 2019
New Revision: 369309

URL: http://llvm.org/viewvc/llvm-project?rev=369309&view=rev
Log:
[lit] Check for accidental external command calls

This patch extends lit's test suite to check that lit's internal shell
doesn't accidentally execute internal commands as external commands.
It does so by putting fake failing versions of those commands in
`PATH` while the entire lit test suite is running.  Without the fixes
in D65697 but with its tests, this approach catches accidental
external `env` calls.

Reviewed By: probinson

Differential Revision: https://reviews.llvm.org/D66293

Added:
    llvm/trunk/utils/lit/tests/Inputs/fake-externals/
    llvm/trunk/utils/lit/tests/Inputs/fake-externals/cd   (with props)
    llvm/trunk/utils/lit/tests/Inputs/fake-externals/diff   (with props)
    llvm/trunk/utils/lit/tests/Inputs/fake-externals/env   (with props)
    llvm/trunk/utils/lit/tests/Inputs/fake-externals/export   (with props)
    llvm/trunk/utils/lit/tests/Inputs/fake-externals/fake_external.py
    llvm/trunk/utils/lit/tests/Inputs/fake-externals/mkdir   (with props)
    llvm/trunk/utils/lit/tests/Inputs/fake-externals/rm   (with props)
Modified:
    llvm/trunk/utils/lit/tests/lit.cfg

Added: llvm/trunk/utils/lit/tests/Inputs/fake-externals/cd
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/fake-externals/cd?rev=369309&view=auto
==============================================================================
--- llvm/trunk/utils/lit/tests/Inputs/fake-externals/cd (added)
+++ llvm/trunk/utils/lit/tests/Inputs/fake-externals/cd Mon Aug 19 15:59:37 2019
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+
+import fake_external
+
+fake_external.execute(__file__)

Propchange: llvm/trunk/utils/lit/tests/Inputs/fake-externals/cd
------------------------------------------------------------------------------
    svn:executable = *

Added: llvm/trunk/utils/lit/tests/Inputs/fake-externals/diff
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/fake-externals/diff?rev=369309&view=auto
==============================================================================
--- llvm/trunk/utils/lit/tests/Inputs/fake-externals/diff (added)
+++ llvm/trunk/utils/lit/tests/Inputs/fake-externals/diff Mon Aug 19 15:59:37 2019
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+
+import fake_external
+
+fake_external.execute(__file__)

Propchange: llvm/trunk/utils/lit/tests/Inputs/fake-externals/diff
------------------------------------------------------------------------------
    svn:executable = *

Added: llvm/trunk/utils/lit/tests/Inputs/fake-externals/env
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/fake-externals/env?rev=369309&view=auto
==============================================================================
--- llvm/trunk/utils/lit/tests/Inputs/fake-externals/env (added)
+++ llvm/trunk/utils/lit/tests/Inputs/fake-externals/env Mon Aug 19 15:59:37 2019
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+
+import fake_external
+
+fake_external.execute(__file__)

Propchange: llvm/trunk/utils/lit/tests/Inputs/fake-externals/env
------------------------------------------------------------------------------
    svn:executable = *

Added: llvm/trunk/utils/lit/tests/Inputs/fake-externals/export
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/fake-externals/export?rev=369309&view=auto
==============================================================================
--- llvm/trunk/utils/lit/tests/Inputs/fake-externals/export (added)
+++ llvm/trunk/utils/lit/tests/Inputs/fake-externals/export Mon Aug 19 15:59:37 2019
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+
+import fake_external
+
+fake_external.execute(__file__)

Propchange: llvm/trunk/utils/lit/tests/Inputs/fake-externals/export
------------------------------------------------------------------------------
    svn:executable = *

Added: llvm/trunk/utils/lit/tests/Inputs/fake-externals/fake_external.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/fake-externals/fake_external.py?rev=369309&view=auto
==============================================================================
--- llvm/trunk/utils/lit/tests/Inputs/fake-externals/fake_external.py (added)
+++ llvm/trunk/utils/lit/tests/Inputs/fake-externals/fake_external.py Mon Aug 19 15:59:37 2019
@@ -0,0 +1,7 @@
+import os
+import sys
+
+def execute(fileName):
+  sys.stderr.write("error: external '{}' command called unexpectedly\n"
+                   .format(os.path.basename(fileName)));
+  sys.exit(1)

Added: llvm/trunk/utils/lit/tests/Inputs/fake-externals/mkdir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/fake-externals/mkdir?rev=369309&view=auto
==============================================================================
--- llvm/trunk/utils/lit/tests/Inputs/fake-externals/mkdir (added)
+++ llvm/trunk/utils/lit/tests/Inputs/fake-externals/mkdir Mon Aug 19 15:59:37 2019
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+
+import fake_external
+
+fake_external.execute(__file__)

Propchange: llvm/trunk/utils/lit/tests/Inputs/fake-externals/mkdir
------------------------------------------------------------------------------
    svn:executable = *

Added: llvm/trunk/utils/lit/tests/Inputs/fake-externals/rm
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/fake-externals/rm?rev=369309&view=auto
==============================================================================
--- llvm/trunk/utils/lit/tests/Inputs/fake-externals/rm (added)
+++ llvm/trunk/utils/lit/tests/Inputs/fake-externals/rm Mon Aug 19 15:59:37 2019
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+
+import fake_external
+
+fake_external.execute(__file__)

Propchange: llvm/trunk/utils/lit/tests/Inputs/fake-externals/rm
------------------------------------------------------------------------------
    svn:executable = *

Modified: llvm/trunk/utils/lit/tests/lit.cfg
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/lit.cfg?rev=369309&r1=369308&r2=369309&view=diff
==============================================================================
--- llvm/trunk/utils/lit/tests/lit.cfg (original)
+++ llvm/trunk/utils/lit/tests/lit.cfg Mon Aug 19 15:59:37 2019
@@ -75,3 +75,14 @@ else:
 if not llvm_config:
   if sys.platform.startswith('win') or sys.platform.startswith('cygwin'):
     config.available_features.add('system-windows')
+
+# For each of lit's internal shell commands ('env', 'cd', 'diff', etc.), put
+# a fake command that always fails at the start of PATH.  This helps us check
+# that we always use lit's internal version rather than some external version
+# that might not be present or behave correctly on all platforms.  Don't do
+# this for 'echo' because an external version is used when it appears in a
+# pipeline.  Don't do this for ':' because it doesn't appear to be a valid file
+# name under Windows.
+test_bin = os.path.join(os.path.dirname(__file__), 'Inputs', 'fake-externals')
+config.environment['PATH'] = os.path.pathsep.join((test_bin,
+                                                   config.environment['PATH']))




More information about the llvm-commits mailing list