dev-libs/confuse: EAPI=8, add some good upstream fixes

Signed-off-by: Arthur Zamarin <arthurzam@gentoo.org>
This commit is contained in:
Arthur Zamarin
2025-10-25 09:38:52 +03:00
parent e3386e5a1d
commit 418d9019df
3 changed files with 132 additions and 0 deletions

View File

@@ -0,0 +1,63 @@
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit multilib-minimal
DESCRIPTION="a configuration file parser library"
HOMEPAGE="https://github.com/libconfuse/libconfuse"
SRC_URI="https://github.com/libconfuse/libconfuse/releases/download/v${PV}/${P}.tar.xz"
LICENSE="ISC"
SLOT="0/2.1.0"
KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~sparc x86 ~amd64-linux ~x86-linux ~ppc-macos"
IUSE="nls static-libs"
BDEPEND="
app-alternatives/lex
dev-build/libtool
virtual/pkgconfig
nls? ( sys-devel/gettext )
"
RDEPEND="
nls? ( virtual/libintl[${MULTILIB_USEDEP}] )
"
PATCHES=(
# Upstream commit to fix CVE-2022-40320:
# https://github.com/libconfuse/libconfuse/commit/d73777c2c3566fb2647727bb56d9a2295b81669b
"${FILESDIR}"/confuse-3.3-fix-CVE-2022-40320.patch
# https://github.com/libconfuse/libconfuse/pull/167
"${FILESDIR}"/confuse-3.3-lfs.patch
# https://github.com/libconfuse/libconfuse/pull/181
"${FILESDIR}"/confuse-3.3-isspace.patch
)
DOCS=( AUTHORS )
src_prepare() {
default
multilib_copy_sources
}
multilib_src_configure() {
# examples are normally compiled but not installed. They
# fail during a mingw crosscompile.
local ECONF_SOURCE=${BUILD_DIR}
econf \
--disable-examples \
$(use_enable nls) \
$(use_enable static-libs static)
}
multilib_src_install_all() {
doman doc/man/man3/*.3
dodoc -r doc/html
docinto examples
dodoc examples/*.{c,conf}
find "${D}" -name '*.la' -type f -delete || die
}

View File

@@ -0,0 +1,38 @@
https://github.com/libconfuse/libconfuse/commit/dc7cef956d6d7c1ec792f9561f732797b52e92d4
From: Thomas Klausner <wiz@gatalith.at>
Date: Mon, 5 May 2025 23:22:51 +0200
Subject: [PATCH] Fix isspace() arguments.
Per ANSI and POSIX, isspace() only accepts arguments that
are valid 'unsigned char' or EOF.
The code passed 'char' arguments, which on many platforms are
'signed char'. These are automatically promoted to integers, keeping
the sign, so negative values like -61 are passed to isspace(),
which is not allowed per the standards.
Casting to 'unsigned char' makes sure the isspace argument is in the
allowed range.
Fixes core dump e.g. in i3status.
Closes #180.
--- a/src/lexer.l
+++ b/src/lexer.l
@@ -397,14 +397,14 @@ static char *trim_whitespace(char *str, unsigned int len)
return str;
while (len > 1) {
- if ((str[len] == 0 || isspace(str[len])) && isspace(str[len - 1]))
+ if ((str[len] == 0 || isspace((unsigned char)str[len])) && isspace((unsigned char)str[len - 1]))
len--;
else
break;
}
str[len] = 0;
- while (isspace(*str))
+ while (isspace((unsigned char)*str))
str++;
return str;

View File

@@ -0,0 +1,31 @@
https://github.com/libconfuse/libconfuse/commit/e967a307bf570306acd949513559e044b0da1f2d
From: Mike Frysinger <vapier@chromium.org>
Date: Tue, 10 Jan 2023 14:03:09 -0500
Subject: [PATCH] configure.ac: enable automatic LFS support
Automatically enable large filesystem support so we use the newer
interfaces when interacting with the filesystem. Without this,
code that tries to stat a file with 64-bit inodes can fail if the
stat structure is only 32-bit (which is common on x86 & arm). On
Linux, this can manifest with some filesystems more often than
others.
Practically speaking, since libconfuse doesn't do too much file
I/O, the overhead should be non-existent. Especially since the
C library (e.g. glibc) is already using the 64-bit syscall even
if the function call was 32-bit.
On systems that have 64-bit stat already (which is common on x86_64
and aarch64), there is no overhead as the code is exactly the same.
--- a/configure.ac
+++ b/configure.ac
@@ -31,6 +31,9 @@ AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION([0.19.6])
AM_GNU_GETTEXT_REQUIRE_VERSION([0.19.6])
+# Checks for OS settings.
+AC_SYS_LARGEFILE
+
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([unistd.h string.h strings.h sys/stat.h windows.h])