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