]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
split: --additional-suffix: disallow trailing '/'
authorPádraig Brady <P@draigBrady.com>
Sun, 28 May 2023 14:17:46 +0000 (15:17 +0100)
committerPádraig Brady <P@draigBrady.com>
Wed, 31 May 2023 16:26:13 +0000 (17:26 +0100)
Note mktemp --suffix has the same inconsistency,
but mktemp -d does support creating dirs
so probably best to leave that as is.

* src/split.c (main): Check for trailing /.
* tests/split/additional-suffix.sh: Augment the test.
Reported in https://bugs.debian.org/1036827

src/split.c
tests/split/additional-suffix.sh

index 09209cc5a83479d1a9c43e2bd512fa338b7b4c85..436fa16df0e3053fa28156e80efbb8f54a474107 100644 (file)
@@ -1398,13 +1398,17 @@ main (int argc, char **argv)
           break;
 
         case ADDITIONAL_SUFFIX_OPTION:
-          if (last_component (optarg) != optarg)
-            {
-              error (0, 0,
-                     _("invalid suffix %s, contains directory separator"),
-                     quote (optarg));
-              usage (EXIT_FAILURE);
-            }
+          {
+            int suffix_len = strlen (optarg);
+            if (last_component (optarg) != optarg
+                || (suffix_len && ISSLASH (optarg[suffix_len - 1])))
+              {
+                error (0, 0,
+                       _("invalid suffix %s, contains directory separator"),
+                       quote (optarg));
+                usage (EXIT_FAILURE);
+              }
+          }
           additional_suffix = optarg;
           break;
 
index ff9a9b5468843be7ac9f09a29a2bb93bc99bade6..9da8b35ea993daf4b209b3a7af51e9b5b34eb2ff 100755 (executable)
@@ -39,6 +39,9 @@ compare exp-2 xab.txt || fail=1
 compare exp-3 xac.txt || fail=1
 
 # Additional suffix must not contain slash
-returns_ 1 split --lines=2 --additional-suffix=a/b in 2>/dev/null >out || fail=1
+returns_ 1 split --lines=2 --additional-suffix=a/b in 2>err >out || fail=1
+grep 'contains directory separator' err || fail=1
+returns_ 1 split --lines=2 --additional-suffix=a/ in 2>err >out || fail=1
+grep 'contains directory separator' err || fail=1
 
 Exit $fail