1
0
mirror of https://github.com/moparisthebest/pacman synced 2024-12-22 15:58:50 -05:00

Check return value of fwrite when copying files

Check that writing to destination file actually occurs in
_alpm_copyfile.  Required adding a new error (PM_ERR_WRITE)
as none of the others appeared appropriate.

Prevents compiler warning when using -D_FORTIFY_SOURCE=2.

Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Allan McRae 2010-06-27 21:13:01 +10:00 committed by Dan McGee
parent 96a1255ead
commit 41724cbcde
2 changed files with 10 additions and 1 deletions

View File

@ -522,6 +522,7 @@ enum _pmerrno_t {
PM_ERR_FILE_CONFLICTS, PM_ERR_FILE_CONFLICTS,
/* Misc */ /* Misc */
PM_ERR_RETRIEVE, PM_ERR_RETRIEVE,
PM_ERR_WRITE,
PM_ERR_INVALID_REGEX, PM_ERR_INVALID_REGEX,
/* External library errors */ /* External library errors */
PM_ERR_LIBARCHIVE, PM_ERR_LIBARCHIVE,

View File

@ -143,7 +143,15 @@ int _alpm_copyfile(const char *src, const char *dest)
/* do the actual file copy */ /* do the actual file copy */
while((len = fread(buf, 1, CPBUFSIZE, in))) { while((len = fread(buf, 1, CPBUFSIZE, in))) {
fwrite(buf, 1, len, out); size_t nwritten = 0;
nwritten = fwrite(buf, 1, len, out);
if((nwritten != len) || ferror(out)) {
pm_errno = PM_ERR_WRITE;
_alpm_log(PM_LOG_ERROR, _("error writing to file '%s': %s\n"),
dest, strerror(errno));
ret = -1;
goto cleanup;
}
} }
/* chmod dest to permissions of src, as long as it is not a symlink */ /* chmod dest to permissions of src, as long as it is not a symlink */