← Commit list

14b7c5d12

Matt Kraai
Matt Kraai
2001-12-11
FAILED Duration: 485s

Subject

Open the source before creating the destination.

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

libbb/copy_file.c+11 -8
@@ -132,21 +132,30 @@ int copy_file(const char *source, const char *dest, int flags)
} else if (S_ISREG(source_stat.st_mode)) {
FILE *sfp, *dfp=NULL;
+ if ((sfp = fopen(source, "r")) == NULL) {
+ perror_msg("unable to open `%s'", source);
+ return -1;
+ }
+
if (dest_exists) {
if (flags & FILEUTILS_INTERACTIVE) {
fprintf(stderr, "%s: overwrite `%s'? ", applet_name, dest);
- if (!ask_confirmation())
+ if (!ask_confirmation()) {
+ fclose (sfp);
return 0;
+ }
}
if ((dfp = fopen(dest, "w")) == NULL) {
if (!(flags & FILEUTILS_FORCE)) {
perror_msg("unable to open `%s'", dest);
+ fclose (sfp);
return -1;
}
if (unlink(dest) < 0) {
perror_msg("unable to remove `%s'", dest);
+ fclose (sfp);
return -1;
}
@@ -162,17 +171,11 @@ int copy_file(const char *source, const char *dest, int flags)
if (fd >= 0)
close(fd);
perror_msg("unable to open `%s'", dest);
+ fclose (sfp);
return -1;
}
}
- if ((sfp = fopen(source, "r")) == NULL) {
- fclose(dfp);
- perror_msg("unable to open `%s'", source);
- status = -1;
- goto end;
- }
-
if (copy_file_chunk(sfp, dfp, -1) < 0)
status = -1;
testsuite/cp/cp-does-not-copy-unreadable-file+4 -0
@@ -0,0 +1,4 @@
+touch foo
+chmod a-r foo
+busybox cp foo bar
+test ! -f bar