coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] install: support stripping files with a leading hyphen


From: Pádraig Brady
Subject: [PATCH] install: support stripping files with a leading hyphen
Date: Fri, 21 Apr 2023 19:14:45 +0100

* src/install.c (strip): Prepend "./" to file names with a leading "-".
* tests/install/strip-program.sh: Add a test case.
* NEWS: Mention the bug fix.
Reported in https://bugs.debian.org/1034429
---
 NEWS                           |  6 ++++++
 src/install.c                  |  9 +++++++--
 tests/install/strip-program.sh | 10 +++++++++-
 3 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/NEWS b/NEWS
index 21129c8fc..8edfa8080 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,12 @@ GNU coreutils NEWS                                    -*- 
outline -*-
 
 * Noteworthy changes in release ?.? (????-??-??) [?]
 
+** Bug fixes
+
+  install --strip now supports installing to files with a leading hyphen.
+  Previously such file names would have caused the strip process to fail.
+  [This bug was present in "the beginning".]
+
 
 * Noteworthy changes in release 9.3 (2023-04-18) [stable]
 
diff --git a/src/install.c b/src/install.c
index 3aa6ea92b..272dfcb8f 100644
--- a/src/install.c
+++ b/src/install.c
@@ -502,8 +502,13 @@ strip (char const *name)
       error (0, errno, _("fork system call failed"));
       break;
     case 0:                    /* Child. */
-      execlp (strip_program, strip_program, name, NULL);
-      die (EXIT_FAILURE, errno, _("cannot run %s"), quoteaf (strip_program));
+      {
+        char const *safe_name = name;
+        if (name && *name == '-')
+          safe_name = file_name_concat (".", name, NULL);
+        execlp (strip_program, strip_program, safe_name, NULL);
+        die (EXIT_FAILURE, errno, _("cannot run %s"), quoteaf (strip_program));
+      }
     default:                   /* Parent. */
       if (waitpid (pid, &status, 0) < 0)
         error (0, errno, _("waiting for strip"));
diff --git a/tests/install/strip-program.sh b/tests/install/strip-program.sh
index 0a702f7fa..1b7de52a2 100755
--- a/tests/install/strip-program.sh
+++ b/tests/install/strip-program.sh
@@ -27,7 +27,6 @@ sed s/b/B/ \$1 > \$1.t && mv \$1.t \$1
 EOF
 chmod a+x b || framework_failure_
 
-
 echo abc > src || framework_failure_
 echo aBc > exp || framework_failure_
 ginstall src dest -s --strip-program=./b || fail=1
@@ -37,4 +36,13 @@ compare exp dest || fail=1
 returns_ 1 ginstall src dest2 -s --strip-program=./FOO || fail=1
 test -e dest2 && fail=1
 
+# Ensure naked hyphens not passed
+cat <<EOF > no-hyphen || framework_failure_
+#!$SHELL
+printf -- '%s\\n' "\$1" | grep '^[^-]'
+EOF
+chmod a+x no-hyphen || framework_failure_
+
+ginstall -s --strip-program=./no-hyphen -- src -dest || fail=1
+
 Exit $fail
-- 
2.26.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]