From 5df7a377f7350ab70a0ec19a998d7edf66a07b26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?= Date: Sun, 11 Sep 2022 23:28:08 +0700 Subject: [PATCH] boost: fix segfault in asio+align module. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reported-by: Érico Nogueira --- .../boost/patches/feature-test-macros.patch | 32 +++++++++++++++++++ srcpkgs/boost/template | 2 +- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/boost/patches/feature-test-macros.patch diff --git a/srcpkgs/boost/patches/feature-test-macros.patch b/srcpkgs/boost/patches/feature-test-macros.patch new file mode 100644 index 00000000000..14849a24870 --- /dev/null +++ b/srcpkgs/boost/patches/feature-test-macros.patch @@ -0,0 +1,32 @@ +boost/align/aligned_alloc.hpp is wrong, it uses feature test macros to +determine whether something is available; +FTMs shouldn't be in user code outside of top level #define's. + +This lead to an issue on musl where libtorrent-rasterbar was including this +header (via boost asio) from two different places, and segfaulting due to +mismatched implementations -- one's the posix one using posix_memalign, the +other one's the generic one that stores a pointer to itself. + +posix_memalign is always available on the libcs we support and should always be +used, so we force that. We still leave applications with the option of forcing +boost specific behavior, if they really want it. + +Instead of patching only boost/align/aligned_alloc.hpp, which fix the +bug if boost::asio is used, but may keep other boost's code use feature tests +macro, now or later, let's patch boost/config.hpp to always define +_XOPEN_SOURCE instead. + +--- a/boost/config.hpp ++++ b/boost/config.hpp +@@ -17,6 +17,11 @@ + #ifndef BOOST_CONFIG_HPP + #define BOOST_CONFIG_HPP + ++#ifdef __linux__ ++/* for _XOPEN_SOURCE and/or _POSIX_C_SOURCE */ ++#include ++#endif ++ + // if we don't have a user config, then use the default location: + #if !defined(BOOST_USER_CONFIG) && !defined(BOOST_NO_USER_CONFIG) + # define BOOST_USER_CONFIG diff --git a/srcpkgs/boost/template b/srcpkgs/boost/template index 57ad72b545f..e47bd7d251b 100644 --- a/srcpkgs/boost/template +++ b/srcpkgs/boost/template @@ -1,7 +1,7 @@ # Template file for 'boost' pkgname=boost version=1.80.0 -revision=1 +revision=2 wrksrc="${pkgname}_${version//\./_}" hostmakedepends="which bzip2-devel icu-devel python3-devel pkg-config" makedepends="zlib-devel bzip2-devel icu-devel python3-devel liblzma-devel