summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app-arch/zstd/files/zstd-1.5.4-crash-no-directory.patch115
-rw-r--r--app-arch/zstd/zstd-1.5.4-r3.ebuild80
2 files changed, 195 insertions, 0 deletions
diff --git a/app-arch/zstd/files/zstd-1.5.4-crash-no-directory.patch b/app-arch/zstd/files/zstd-1.5.4-crash-no-directory.patch
new file mode 100644
index 000000000000..d64e1c1d34f0
--- /dev/null
+++ b/app-arch/zstd/files/zstd-1.5.4-crash-no-directory.patch
@@ -0,0 +1,115 @@
+https://github.com/facebook/zstd/issues/3523
+https://github.com/facebook/zstd/pull/3541
+
+From 50e8f55e7d5928af9c3411afdb4fbedb4d8f770d Mon Sep 17 00:00:00 2001
+From: "W. Felix Handte" <w@felixhandte.com>
+Date: Thu, 9 Mar 2023 12:46:37 -0500
+Subject: [PATCH 1/3] Fix Python 3.6 Incompatibility in CLI Tests
+
+--- a/tests/cli-tests/run.py
++++ b/tests/cli-tests/run.py
+@@ -535,7 +535,8 @@ def _run_script(self, script: str, cwd: str) -> None:
+ subprocess.run(
+ args=[script],
+ stdin=subprocess.DEVNULL,
+- capture_output=True,
++ stdout=subprocess.PIPE,
++ stderr=subprocess.PIPE,
+ cwd=cwd,
+ env=env,
+ check=True,
+
+From c4c3e11958aed4dc99ec22e3d31c405217575a8c Mon Sep 17 00:00:00 2001
+From: "W. Felix Handte" <w@felixhandte.com>
+Date: Thu, 9 Mar 2023 12:47:40 -0500
+Subject: [PATCH 2/3] Avoid Calling `setvbuf()` on Null File Pointer
+
+--- a/programs/fileio.c
++++ b/programs/fileio.c
+@@ -644,18 +644,24 @@ FIO_openDstFile(FIO_ctx_t* fCtx, FIO_prefs_t* const prefs,
+ #endif
+ if (f == NULL) {
+ DISPLAYLEVEL(1, "zstd: %s: %s\n", dstFileName, strerror(errno));
++ } else {
++ /* An increased buffer size can provide a significant performance
++ * boost on some platforms. Note that providing a NULL buf with a
++ * size that's not 0 is not defined in ANSI C, but is defined in an
++ * extension. There are three possibilities here:
++ * 1. Libc supports the extended version and everything is good.
++ * 2. Libc ignores the size when buf is NULL, in which case
++ * everything will continue as if we didn't call `setvbuf()`.
++ * 3. We fail the call and execution continues but a warning
++ * message might be shown.
++ * In all cases due execution continues. For now, I believe that
++ * this is a more cost-effective solution than managing the buffers
++ * allocations ourselves (will require an API change).
++ */
++ if (setvbuf(f, NULL, _IOFBF, 1 MB)) {
++ DISPLAYLEVEL(2, "Warning: setvbuf failed for %s\n", dstFileName);
++ }
+ }
+- /* An increased buffer size can provide a significant performance boost on some platforms.
+- * Note that providing a NULL buf with a size that's not 0 is not defined in ANSI C, but is defined
+- * in an extension. There are three possibilities here -
+- * 1. Libc supports the extended version and everything is good.
+- * 2. Libc ignores the size when buf is NULL, in which case everything will continue as if we didn't
+- * call `setvbuf`.
+- * 3. We fail the call and execution continues but a warning message might be shown.
+- * In all cases due execution continues. For now, I believe that this is a more cost-effective
+- * solution than managing the buffers allocations ourselves (will require an API change). */
+- if(setvbuf(f, NULL, _IOFBF, 1 MB))
+- DISPLAYLEVEL(2, "Warning: setvbuf failed for %s\n", dstFileName);
+ return f;
+ }
+ }
+
+From 957a0ae52d0f49eccd260a22ceb5f5dfed064e9f Mon Sep 17 00:00:00 2001
+From: "W. Felix Handte" <w@felixhandte.com>
+Date: Thu, 9 Mar 2023 12:48:11 -0500
+Subject: [PATCH 3/3] Add CLI Test
+
+--- /dev/null
++++ b/tests/cli-tests/file-stat/compress-file-to-dir-without-write-perm.sh
+@@ -0,0 +1,12 @@
++#!/bin/sh
++
++# motivated by issue #3523
++
++datagen > file
++mkdir out
++chmod 000 out
++
++zstd file -q --trace-file-stat -o out/file.zst
++zstd -tq out/file.zst
++
++chmod 777 out
+--- /dev/null
++++ b/tests/cli-tests/file-stat/compress-file-to-dir-without-write-perm.sh.stderr.exact
+@@ -0,0 +1,26 @@
++Trace:FileStat: > UTIL_isLink(file)
++Trace:FileStat: < 0
++Trace:FileStat: > UTIL_isConsole(2)
++Trace:FileStat: < 0
++Trace:FileStat: > UTIL_getFileSize(file)
++Trace:FileStat: > UTIL_stat(-1, file)
++Trace:FileStat: < 1
++Trace:FileStat: < 65537
++Trace:FileStat: > UTIL_stat(-1, file)
++Trace:FileStat: < 1
++Trace:FileStat: > UTIL_isDirectoryStat()
++Trace:FileStat: < 0
++Trace:FileStat: > UTIL_stat(-1, file)
++Trace:FileStat: < 1
++Trace:FileStat: > UTIL_isSameFile(file, out/file.zst)
++Trace:FileStat: > UTIL_stat(-1, file)
++Trace:FileStat: < 1
++Trace:FileStat: > UTIL_stat(-1, out/file.zst)
++Trace:FileStat: < 0
++Trace:FileStat: < 0
++Trace:FileStat: > UTIL_isRegularFile(out/file.zst)
++Trace:FileStat: > UTIL_stat(-1, out/file.zst)
++Trace:FileStat: < 0
++Trace:FileStat: < 0
++zstd: out/file.zst: Permission denied
++zstd: can't stat out/file.zst : Permission denied -- ignored
+
diff --git a/app-arch/zstd/zstd-1.5.4-r3.ebuild b/app-arch/zstd/zstd-1.5.4-r3.ebuild
new file mode 100644
index 000000000000..a74b317a3e8d
--- /dev/null
+++ b/app-arch/zstd/zstd-1.5.4-r3.ebuild
@@ -0,0 +1,80 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit meson-multilib usr-ldscript
+
+DESCRIPTION="zstd fast compression library"
+HOMEPAGE="https://facebook.github.io/zstd/"
+# Drop .gh on next bump (>1.5.4), it's only here as we switched to release
+# tarball.
+SRC_URI="https://github.com/facebook/zstd/releases/download/v${PV}/${P}.tar.gz -> ${P}.gh.tar.gz"
+S="${WORKDIR}"/${P}/build/meson
+
+LICENSE="|| ( BSD GPL-2 )"
+SLOT="0/1"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
+IUSE="+lzma lz4 static-libs test zlib"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ lzma? ( app-arch/xz-utils )
+ lz4? ( app-arch/lz4:= )
+ zlib? ( sys-libs/zlib )
+"
+DEPEND="${RDEPEND}"
+
+MESON_PATCHES=(
+ # Workaround until Valgrind bugfix lands
+ "${FILESDIR}"/${PN}-1.5.4-no-find-valgrind.patch
+ # Allow building tests w/o programs (useful for multilib)
+ "${FILESDIR}"/${PN}-1.5.4-tests-no-programs.patch
+)
+
+PATCHES=(
+ # Fix build w/o zlib, bug #894058
+ "${FILESDIR}"/${P}-fix-no-zlib-build.patch
+ "${FILESDIR}"/${P}-crash-no-directory.patch
+)
+
+src_prepare() {
+ cd "${WORKDIR}"/${P} || die
+ default
+
+ cd "${S}" || die
+ eapply "${MESON_PATCHES[@]}"
+}
+
+multilib_src_configure() {
+ local native_file="${T}"/meson.${CHOST}.${ABI}.ini.local
+
+ # This replaces the no-find-valgrind patch once bugfix lands in a meson
+ # release + we can BDEPEND on it (https://github.com/mesonbuild/meson/pull/11372)
+ cat >> ${native_file} <<-EOF || die
+ [binaries]
+ valgrind='valgrind-falseified'
+ EOF
+
+ local emesonargs=(
+ -Ddefault_library=$(multilib_native_usex static-libs both shared)
+
+ $(meson_native_true bin_programs)
+ $(meson_native_true bin_contrib)
+ $(meson_use test bin_tests)
+
+ $(meson_native_use_feature zlib)
+ $(meson_native_use_feature lzma)
+ $(meson_native_use_feature lz4)
+
+ --native-file "${native_file}"
+ )
+
+ meson_src_configure
+}
+
+multilib_src_install() {
+ meson_src_install
+
+ multilib_is_native_abi && gen_usr_ldscript -a zstd
+}