[git commit] cp,mv: fix -t DIR option
Denys Vlasenko
vda.linux at googlemail.com
Thu Jun 24 22:23:29 UTC 2021
commit: https://git.busybox.net/busybox/commit/?id=a84bbc54257e68ef149cbaff8835c9cb3605c9ac
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master
When the '-t DIR' option is used the loop over the remaining
arguments should terminate when a NULL pointer is reached.
function old new delta
mv_main 585 590 +5
cp_main 492 496 +4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 9/0) Total: 9 bytes
Signed-off-by: Ron Yorston <rmy at pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
coreutils/cp.c | 4 ++--
coreutils/mv.c | 4 ++--
testsuite/mv/mv-files-to-dir-2 | 16 ++++++++++++++++
3 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/coreutils/cp.c b/coreutils/cp.c
index b7f0e290f..50ca1ccea 100644
--- a/coreutils/cp.c
+++ b/coreutils/cp.c
@@ -252,7 +252,7 @@ int cp_main(int argc, char **argv)
}
}
}
- /* else: last is DIR from "t -DIR" */
+ /* else: last is DIR from "-t DIR" */
while (1) {
#if ENABLE_FEATURE_CP_LONG_OPTIONS
@@ -274,7 +274,7 @@ int cp_main(int argc, char **argv)
if (copy_file(*argv, dest, flags) < 0) {
status = EXIT_FAILURE;
}
- if (*++argv == last) {
+ if (!*++argv || *argv == last) {
/* possibly leaking dest... */
break;
}
diff --git a/coreutils/mv.c b/coreutils/mv.c
index eae2e99bb..fd2422683 100644
--- a/coreutils/mv.c
+++ b/coreutils/mv.c
@@ -108,7 +108,7 @@ int mv_main(int argc, char **argv)
/* else: fall through into "do { move SRC to DIR/SRC } while" loop */
}
}
- /* else: last is DIR from "t -DIR" */
+ /* else: last is DIR from "-t DIR" */
do {
dest = concat_path_file(last, bb_get_last_path_component_strip(*argv));
@@ -185,7 +185,7 @@ int mv_main(int argc, char **argv)
if (dest != last) {
free((void *) dest);
}
- } while (*++argv != last);
+ } while (*++argv && *argv != last);
return status;
}
diff --git a/testsuite/mv/mv-files-to-dir-2 b/testsuite/mv/mv-files-to-dir-2
new file mode 100644
index 000000000..e189ebb6f
--- /dev/null
+++ b/testsuite/mv/mv-files-to-dir-2
@@ -0,0 +1,16 @@
+echo file number one > file1
+echo file number two > file2
+ln -s file2 link1
+mkdir dir1
+TZ=UTC0 touch -d '2000-01-30 05:24:08' dir1/file3
+mkdir there
+busybox mv -t there file1 file2 link1 dir1
+test -f there/file1
+test -f there/file2
+test -f there/dir1/file3
+test -L there/link1
+test xfile2 = x`readlink there/link1`
+test ! -e file1
+test ! -e file2
+test ! -e link1
+test ! -e dir1/file3
More information about the busybox-cvs
mailing list