unlink() an existing file, before opening it, simply truncating can
authorGlenn L McGrath <bug1@ihug.co.nz>
Mon, 21 Apr 2003 10:07:48 +0000 (10:07 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Mon, 21 Apr 2003 10:07:48 +0000 (10:07 -0000)
cause nasty problems if overwriting glibc, spotted by waldi.

archival/tar.c

index c39d5787fee108e9d9bd5dfda8bf26218e0c5537..23af9ffa36e9ba0cab6024dde5487410914fa87e 100644 (file)
@@ -472,7 +472,8 @@ static inline int writeTarFile(const char *tarName, const int verboseFlag,
                tbInfo.tarFd = fileno(stdout);
                tbInfo.verboseFlag = verboseFlag ? 2 : 0;
        } else {
-               tbInfo.tarFd = open(tarName, O_WRONLY | O_CREAT | O_TRUNC, 0644);
+               unlink(tarName);
+               tbInfo.tarFd = open(tarName, O_WRONLY | O_CREAT | O_EXCL, 0644);
                tbInfo.verboseFlag = verboseFlag ? 1 : 0;
        }