diff options
-rw-r--r-- | coreutils/cp.c | 4 | ||||
-rw-r--r-- | coreutils/mv.c | 4 | ||||
-rw-r--r-- | 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) | |||
252 | } | 252 | } |
253 | } | 253 | } |
254 | } | 254 | } |
255 | /* else: last is DIR from "t -DIR" */ | 255 | /* else: last is DIR from "-t DIR" */ |
256 | 256 | ||
257 | while (1) { | 257 | while (1) { |
258 | #if ENABLE_FEATURE_CP_LONG_OPTIONS | 258 | #if ENABLE_FEATURE_CP_LONG_OPTIONS |
@@ -274,7 +274,7 @@ int cp_main(int argc, char **argv) | |||
274 | if (copy_file(*argv, dest, flags) < 0) { | 274 | if (copy_file(*argv, dest, flags) < 0) { |
275 | status = EXIT_FAILURE; | 275 | status = EXIT_FAILURE; |
276 | } | 276 | } |
277 | if (*++argv == last) { | 277 | if (!*++argv || *argv == last) { |
278 | /* possibly leaking dest... */ | 278 | /* possibly leaking dest... */ |
279 | break; | 279 | break; |
280 | } | 280 | } |
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) | |||
108 | /* else: fall through into "do { move SRC to DIR/SRC } while" loop */ | 108 | /* else: fall through into "do { move SRC to DIR/SRC } while" loop */ |
109 | } | 109 | } |
110 | } | 110 | } |
111 | /* else: last is DIR from "t -DIR" */ | 111 | /* else: last is DIR from "-t DIR" */ |
112 | 112 | ||
113 | do { | 113 | do { |
114 | dest = concat_path_file(last, bb_get_last_path_component_strip(*argv)); | 114 | dest = concat_path_file(last, bb_get_last_path_component_strip(*argv)); |
@@ -185,7 +185,7 @@ int mv_main(int argc, char **argv) | |||
185 | if (dest != last) { | 185 | if (dest != last) { |
186 | free((void *) dest); | 186 | free((void *) dest); |
187 | } | 187 | } |
188 | } while (*++argv != last); | 188 | } while (*++argv && *argv != last); |
189 | 189 | ||
190 | return status; | 190 | return status; |
191 | } | 191 | } |
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 @@ | |||
1 | echo file number one > file1 | ||
2 | echo file number two > file2 | ||
3 | ln -s file2 link1 | ||
4 | mkdir dir1 | ||
5 | TZ=UTC0 touch -d '2000-01-30 05:24:08' dir1/file3 | ||
6 | mkdir there | ||
7 | busybox mv -t there file1 file2 link1 dir1 | ||
8 | test -f there/file1 | ||
9 | test -f there/file2 | ||
10 | test -f there/dir1/file3 | ||
11 | test -L there/link1 | ||
12 | test xfile2 = x`readlink there/link1` | ||
13 | test ! -e file1 | ||
14 | test ! -e file2 | ||
15 | test ! -e link1 | ||
16 | test ! -e dir1/file3 | ||