From owner-svn-src-vendor@freebsd.org Mon Mar 2 08:31:00 2020 Return-Path: Delivered-To: svn-src-vendor@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id EF6AA25E287; Mon, 2 Mar 2020 08:31:00 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48WCyr68Bmz3Qfl; Mon, 2 Mar 2020 08:31:00 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id CD8C61995E; Mon, 2 Mar 2020 08:31:00 +0000 (UTC) (envelope-from mm@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0228V0ld024419; Mon, 2 Mar 2020 08:31:00 GMT (envelope-from mm@FreeBSD.org) Received: (from mm@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0228V0X2024417; Mon, 2 Mar 2020 08:31:00 GMT (envelope-from mm@FreeBSD.org) Message-Id: <202003020831.0228V0X2024417@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mm set sender to mm@FreeBSD.org using -f From: Martin Matuska Date: Mon, 2 Mar 2020 08:31:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r358532 - vendor/libarchive/dist/libarchive X-SVN-Group: vendor X-SVN-Commit-Author: mm X-SVN-Commit-Paths: vendor/libarchive/dist/libarchive X-SVN-Commit-Revision: 358532 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-vendor@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for the vendor work area tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Mar 2020 08:31:01 -0000 Author: mm Date: Mon Mar 2 08:30:59 2020 New Revision: 358532 URL: https://svnweb.freebsd.org/changeset/base/358532 Log: Update vendor/libarchive/dist to git f001f3b0e6a66a7eb989ed3783791c0316831202 Relevant vendor changes: Issue #1341: Safe writes: improve error handling Modified: vendor/libarchive/dist/libarchive/archive_util.c vendor/libarchive/dist/libarchive/archive_write_disk_posix.c vendor/libarchive/dist/libarchive/archive_write_disk_windows.c Modified: vendor/libarchive/dist/libarchive/archive_util.c ============================================================================== --- vendor/libarchive/dist/libarchive/archive_util.c Mon Mar 2 07:40:08 2020 (r358531) +++ vendor/libarchive/dist/libarchive/archive_util.c Mon Mar 2 08:30:59 2020 (r358532) @@ -365,6 +365,7 @@ __archive_mktempx(const char *tmpdir, wchar_t *templat } fd = _open_osfhandle((intptr_t)h, _O_BINARY | _O_RDWR); if (fd == -1) { + la_dosmaperr(GetLastError()); CloseHandle(h); goto exit_tmpfile; } else Modified: vendor/libarchive/dist/libarchive/archive_write_disk_posix.c ============================================================================== --- vendor/libarchive/dist/libarchive/archive_write_disk_posix.c Mon Mar 2 07:40:08 2020 (r358531) +++ vendor/libarchive/dist/libarchive/archive_write_disk_posix.c Mon Mar 2 08:30:59 2020 (r358532) @@ -1654,7 +1654,6 @@ _archive_write_disk_finish_entry(struct archive *_a) { struct archive_write_disk *a = (struct archive_write_disk *)_a; int ret = ARCHIVE_OK; - int oerrno; archive_check_magic(&a->archive, ARCHIVE_WRITE_DISK_MAGIC, ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA, @@ -1856,12 +1855,10 @@ finish_metadata: a->fd = -1; if (a->tmpname) { if (rename(a->tmpname, a->name) == -1) { - oerrno = errno; - unlink(a->tmpname); - errno = oerrno; archive_set_error(&a->archive, errno, - "Failed to safe write"); - ret = ARCHIVE_FATAL; + "Failed to rename temporary file"); + ret = ARCHIVE_FAILED; + unlink(a->tmpname); } a->tmpname = NULL; } @@ -2148,8 +2145,11 @@ restore_entry(struct archive_write_disk *a) if ((a->flags & ARCHIVE_EXTRACT_SAFE_WRITES) && S_ISREG(a->st.st_mode)) { /* Use a temporary file to extract */ - if ((a->fd = la_mktemp(a)) == -1) + if ((a->fd = la_mktemp(a)) == -1) { + archive_set_error(&a->archive, errno, + "Can't create temporary file"); return ARCHIVE_FAILED; + } a->pst = NULL; en = 0; } else { Modified: vendor/libarchive/dist/libarchive/archive_write_disk_windows.c ============================================================================== --- vendor/libarchive/dist/libarchive/archive_write_disk_windows.c Mon Mar 2 07:40:08 2020 (r358531) +++ vendor/libarchive/dist/libarchive/archive_write_disk_windows.c Mon Mar 2 08:30:59 2020 (r358532) @@ -549,6 +549,8 @@ la_mktemp(struct archive_write_disk *a) a->tmpname = a->_tmpname_data.s; fd = __archive_mkstemp(a->tmpname); + if (fd == -1) + return -1; mode = a->mode & 0777 & ~a->user_umask; if (la_chmod(a->tmpname, mode) == -1) { @@ -1174,7 +1176,6 @@ _archive_write_disk_finish_entry(struct archive *_a) { struct archive_write_disk *a = (struct archive_write_disk *)_a; int ret = ARCHIVE_OK; - int oerrno; archive_check_magic(&a->archive, ARCHIVE_WRITE_DISK_MAGIC, ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA, @@ -1282,12 +1283,11 @@ _archive_write_disk_finish_entry(struct archive *_a) /* Windows does not support atomic rename */ disk_unlink(a->name); if (_wrename(a->tmpname, a->name) != 0) { - oerrno = errno; - disk_unlink(a->tmpname); - errno = oerrno; + la_dosmaperr(GetLastError()); archive_set_error(&a->archive, errno, - "Failed to safe write"); - ret = ARCHIVE_FATAL; + "Failed to rename temporary file"); + ret = ARCHIVE_FAILED; + disk_unlink(a->tmpname); } a->tmpname = NULL; } @@ -1577,12 +1577,17 @@ restore_entry(struct archive_write_disk *a) S_ISREG(st_mode)) { int fd = la_mktemp(a); - if (fd == -1) + if (fd == -1) { + la_dosmaperr(GetLastError()); + archive_set_error(&a->archive, errno, + "Can't create temporary file"); return (ARCHIVE_FAILED); + } a->fh = (HANDLE)_get_osfhandle(fd); - if (a->fh == INVALID_HANDLE_VALUE) + if (a->fh == INVALID_HANDLE_VALUE) { + la_dosmaperr(GetLastError()); return (ARCHIVE_FAILED); - + } a->pst = NULL; en = 0; } else {