[Buildroot] [PATCH] support/dependencies: detect and bailout when PATH contains spaces/TABs

Yann E. MORIN yann.morin.1998 at free.fr
Tue Mar 2 12:33:33 UTC 2021

In Makefiles, variables are split, filtered, and otherwise mangled on a
space as a separator. In a shell, they will also be split on TABs.

We split and filter and iterate of variables in a lot of places, and
most importantluy, spaces in PATH is very seldom tested, if at all, so a
lot of packages will not be working properly in such a situation.

For example, the config.guess contains constructs that are not resilient
to a space in PATH:
    PATH=$PATH:/.attbin ; export PATH

Also, our fakedate will iterate over PATH:

    for P in `echo $PATH | tr ':' ' '`; do

Those are only two cases, but the first means basically all
autotools-based packages are susceptible to subtle breakage.

Furthermore, Buildroot itself does not support that the top-level or
output directories are in a path with spaces anyway.

So, instead of chasing all cases that might be potentially broken,
let's just detect the case and bail out, like we already do when PATH
contains a \n, or when it contains the current working directory.

Reported-by: Dan Raymond <draymond at foxvalley.net>
Signed-off-by: Yann E. MORIN <yann.morin.1998 at free.fr>

Notes: Dan had provided a patch [0] that would fix their own specific
issue when runing linux-menuconfig, but I believe this is by far
insufficient to properly solve the issues with spaces in PATH, and I
believe it can't be reliably fixed (at least not in the foreseeable
future with our available manpower), so I prefer that we detect the
situation and bail out.

[0] https://patchwork.ozlabs.org/project/buildroot/patch/16100eb6-bac8-2e4d-65f2-26333179f3b8@foxvalley.net/
 support/dependencies/dependencies.sh | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/support/dependencies/dependencies.sh b/support/dependencies/dependencies.sh
index b44d28682c..8cbfa984c7 100755
--- a/support/dependencies/dependencies.sh
+++ b/support/dependencies/dependencies.sh
@@ -2,6 +2,8 @@
 # vi: set sw=4 ts=4:
 export LC_ALL=C
+TAB="$(printf '\t')"
+NL="$(printf '\n')"
 # Verify that grep works
 echo "WORKS" | grep "WORKS" >/dev/null 2>&1
@@ -35,9 +37,9 @@ case ":${PATH:-unset}:" in
 	echo "PATH environment variable. This doesn't work."
 	exit 1
-"*)	printf "\n"
-	printf "Your PATH contains a newline (\\\n) character.\n"
+(*" "*|*"${TAB}"*|*"${NL}"*)
+	printf "\n"
+	printf "Your PATH contains spaces, TABs, and/or newline (\\\n) characters.\n"
 	printf "This doesn't work. Fix you PATH.\n"
 	exit 1

More information about the buildroot mailing list