commit: 61b6130343a41b49da1ffe7376ab5d2077a37411 Author: Sebastian Pipping <sping <AT> gentoo <DOT> org> AuthorDate: Sun Apr 6 01:54:52 2025 +0000 Commit: Sebastian Pipping <sping <AT> gentoo <DOT> org> CommitDate: Sun Apr 6 02:13:19 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=61b61303
dev-libs/xmlrpc-c: Unbundle dev-libs/expat Bug: https://bugs.gentoo.org/952113 Signed-off-by: Sebastian Pipping <sping <AT> gentoo.org> .../files/xmlrpc-c-1.59.03-use-system-expat.patch | 229 +++++++++++++++++++++ dev-libs/xmlrpc-c/xmlrpc-c-1.59.03-r2.ebuild | 90 ++++++++ 2 files changed, 319 insertions(+) diff --git a/dev-libs/xmlrpc-c/files/xmlrpc-c-1.59.03-use-system-expat.patch b/dev-libs/xmlrpc-c/files/xmlrpc-c-1.59.03-use-system-expat.patch new file mode 100644 index 000000000000..df25189042e5 --- /dev/null +++ b/dev-libs/xmlrpc-c/files/xmlrpc-c-1.59.03-use-system-expat.patch @@ -0,0 +1,229 @@ +From 5d276a95a6953c51ed4fd20cabc6eab3808755e5 Mon Sep 17 00:00:00 2001 +From: Sebastian Pipping <[email protected]> +Date: Sun, 6 Apr 2025 02:19:15 +0200 +Subject: [PATCH] Use system libexpat rather than bundled lib/expat/ for + security + +--- + common.mk | 31 +------------------------------ + config.mk.in | 1 + + lib/Makefile | 3 --- + src/Makefile | 8 +++----- + src/cpp/Makefile | 6 ++---- + src/xmlrpc_expat.c | 18 ++++++++++-------- + xmlrpc-c-config.test.main | 6 ++---- + 7 files changed, 19 insertions(+), 54 deletions(-) + +diff --git a/common.mk b/common.mk +index e6e79a0..4f8b8b7 100644 +--- a/common.mk ++++ b/common.mk +@@ -216,22 +216,6 @@ LIBXMLRPC_SERVER_CGI_A = $(BLDDIR)/src/libxmlrpc_server_cgi.a + + endif + +-LIBXMLRPC_XMLTOK_DIR = $(BLDDIR)/lib/expat/xmltok +- +-ifneq ($(OMIT_XMLTOK_LIB_RULE),Y) +-LIBXMLRPC_XMLTOK = \ +- $(call shliblefn, $(LIBXMLRPC_XMLTOK_DIR)/libxmlrpc_xmltok) +-LIBXMLRPC_XMLTOK_A = $(LIBXMLRPC_XMLTOK_DIR)/libxmlrpc_xmltok.a +-endif +- +-LIBXMLRPC_XMLPARSE_DIR = $(BLDDIR)/lib/expat/xmlparse +- +-ifneq ($(OMIT_XMLPARSE_LIB_RULE),Y) +-LIBXMLRPC_XMLPARSE = \ +- $(call shliblefn, $(LIBXMLRPC_XMLPARSE_DIR)/libxmlrpc_xmlparse) +-LIBXMLRPC_XMLPARSE_A = $(LIBXMLRPC_XMLPARSE_DIR)/libxmlrpc_xmlparse.a +-endif +- + LIBXMLRPC_ABYSS_DIR = $(BLDDIR)/lib/abyss/src + + ifneq ($(OMIT_ABYSS_LIB_RULE),Y) +@@ -270,16 +254,11 @@ LIBXMLRPC_SERVER_PSTREAMPP = \ + $(call shliblefn, $(BLDDIR)/src/cpp/libxmlrpc_server_pstream++) + LIBXMLRPC_SERVER_PSTREAMPP_A = $(BLDDIR)/src/cpp/libxmlrpc_server_pstream++.a + +-# LIBXMLRPC_XML is the list of Xmlrpc-c libraries we need to parse +-# XML. If we're using an external library to parse XML, this is null. + # LDLIBS_XML is the corresponding -L/-l options + + ifneq ($(ENABLE_LIBXML2_BACKEND),yes) + # We're using the internal Expat XML parser +- LIBXMLRPC_XML = $(LIBXMLRPC_XMLPARSE) $(LIBXMLRPC_XMLTOK) +- LDLIBS_XML = \ +- -L$(BLDDIR)/lib/expat/xmlparse -lxmlrpc_xmlparse \ +- -L$(BLDDIR)/lib/expat/xmltok -lxmlrpc_xmltok ++ LDLIBS_XML = $(shell $(PKG_CONFIG) --libs expat) + else + LDLIBS_XML = $(shell xml2-config --libs) + endif +@@ -472,14 +451,6 @@ $(LIBXMLRPC_UTILPP) $(LIBXMLRPC_UTILPP_A) : FORCE + $(MAKE) -C $(dir $@) -f $(SRCDIR)/lib/libutil++/Makefile \ + $(notdir $@) + +-$(LIBXMLRPC_XMLPARSE) $(LIBXMLRPC_XMLPARSE_A) : FORCE +- $(MAKE) -C $(dir $@) -f $(SRCDIR)/lib/expat/xmlparse/Makefile \ +- $(notdir $@) +- +-$(LIBXMLRPC_XMLTOK) $(LIBXMLRPC_XMLTOK_A) : FORCE +- $(MAKE) -C $(dir $@) -f $(SRCDIR)/lib/expat/xmltok/Makefile \ +- $(notdir $@) +- + $(LIBXMLRPC_ABYSS) $(LIBXMLRPC_ABYSS_A): FORCE + $(MAKE) -C $(dir $@) -f $(SRCDIR)/lib/abyss/src/Makefile \ + $(notdir $@) +diff --git a/config.mk.in b/config.mk.in +index 725c063..5251c85 100644 +--- a/config.mk.in ++++ b/config.mk.in +@@ -52,6 +52,7 @@ CXX = @CXX@ + CCLD = $(CC) + CXXLD = $(CXX) + AR = @AR@ ++PKG_CONFIG = pkg-config + RANLIB = @RANLIB@ + LN_S = ln -s + INSTALL = $(SRCDIR)/install-sh +diff --git a/lib/Makefile b/lib/Makefile +index c0e7889..b573ed5 100644 +--- a/lib/Makefile ++++ b/lib/Makefile +@@ -28,9 +28,6 @@ endif + ifeq ($(MUST_BUILD_LIBWWW_CLIENT),yes) + SUBDIRS += libwww_transport + endif +-ifneq ($(ENABLE_LIBXML2_BACKEND),yes) +- SUBDIRS += expat +-endif + + ifeq ($(HAVE_OPENSSL),Y) + SUBDIRS += openssl +diff --git a/src/Makefile b/src/Makefile +index acd04dd..75ffafb 100644 +--- a/src/Makefile ++++ b/src/Makefile +@@ -73,10 +73,8 @@ ifeq ($(ENABLE_LIBXML2_BACKEND),yes) + XML_PKGCONFIG_REQ = libxml-2.0 + else + XMLRPC_XML_PARSER = xmlrpc_expat +- XML_PARSER_LIBDEP = \ +- -Lblddir/lib/expat/xmlparse -lxmlrpc_xmlparse \ +- -Lblddir/lib/expat/xmltok -lxmlrpc_xmltok +- XML_PARSER_LIBDEP_DEP = $(LIBXMLRPC_XMLPARSE) $(LIBXMLRPC_XMLTOK) ++ XML_PARSER_LIBDEP = $(shell $(PKG_CONFIG) expat --libs) ++ XML_PARSER_LIBDEP_DEP = + XML_PKGCONFIG_REQ = xmlrpc_expat + endif + +@@ -278,7 +276,7 @@ BASIC_INCLUDES = \ + ifeq ($(ENABLE_LIBXML2_BACKEND),yes) + LIBXML_INCLUDES = $(shell xml2-config --cflags) + else +- LIBXML_INCLUDES = -Isrcdir/lib/expat/xmlparse ++ LIBXML_INCLUDES = $(shell $(PKG_CONFIG) --cflags expat) + endif + + $(LIBXMLRPC_MODS:%=%.o) \ +diff --git a/src/cpp/Makefile b/src/cpp/Makefile +index 184b254..986af46 100644 +--- a/src/cpp/Makefile ++++ b/src/cpp/Makefile +@@ -44,3 +44,3 @@ DEP_SOURCES = *.cpp + else +- LIBXML_INCLUDES = -Isrcdir/lib/expat/xmlparse ++ LIBXML_INCLUDES = $(shell $(PKG_CONFIG) --cflags expat) + endif +@@ -51,5 +51,3 @@ DEP_SOURCES = *.cpp + else +- XML_PARSER_LIBDEP = \ +- -L$(BLDDIR)/lib/expat/xmlparse -lxmlrpc_xmlparse \ +- -L$(BLDDIR)/lib/expat/xmltok -lxmlrpc_xmltok ++ XML_PARSER_LIBDEP = $(shell $(PKG_CONFIG) --libs expat) + endif +diff --git a/src/xmlrpc_expat.c b/src/xmlrpc_expat.c +index 30fae15..2e01ec3 100644 +--- a/src/xmlrpc_expat.c ++++ b/src/xmlrpc_expat.c +@@ -6,7 +6,7 @@ + #include <stdlib.h> + #include <string.h> + +-#include <xmlparse.h> /* Expat */ ++#include <expat.h> + + #include "bool.h" + +@@ -419,18 +419,18 @@ createParser(xmlrpc_env * const envP, + -----------------------------------------------------------------------------*/ + XML_Parser parser; + +- parser = xmlrpc_XML_ParserCreate(NULL); ++ parser = XML_ParserCreate(NULL); + if (parser == NULL) + xmlrpc_faultf(envP, "Could not create expat parser"); + else { + initParseContext(contextP, memPoolP); + +- xmlrpc_XML_SetUserData(parser, contextP); +- xmlrpc_XML_SetElementHandler( ++ XML_SetUserData(parser, contextP); ++ XML_SetElementHandler( + parser, + (XML_StartElementHandler) startElement, + (XML_EndElementHandler) endElement); +- xmlrpc_XML_SetCharacterDataHandler( ++ XML_SetCharacterDataHandler( + parser, + (XML_CharacterDataHandler) characterData); + } +@@ -445,7 +445,7 @@ destroyParser(XML_Parser const parser, + + termParseContext(contextP); + +- xmlrpc_XML_ParserFree(parser); ++ XML_ParserFree(parser); + } + + +@@ -483,15 +483,17 @@ xml_parse(xmlrpc_env * const envP, + if (!envP->fault_occurred) { + bool ok; + +- ok = xmlrpc_XML_Parse(parser, xmlData, xmlDataLen, 1); ++ ok = XML_Parse(parser, xmlData, xmlDataLen, 1); + /* sets 'context', *envP */ + if (!ok) { + /* Expat failed on its own to parse it -- this is not an error + that our handlers detected. + */ ++ const enum XML_Error error_code = XML_GetErrorCode(parser); ++ const char * const error_string = (error_code == XML_ERROR_NONE) ? NULL : XML_ErrorString(error_code); + xmlrpc_env_set_fault( + envP, XMLRPC_PARSE_ERROR, +- xmlrpc_XML_GetErrorString(parser)); ++ error_string); + if (!context.env.fault_occurred) { + /* Have to clean up what our handlers built before Expat + barfed. +diff --git a/xmlrpc-c-config.test.main b/xmlrpc-c-config.test.main +index d184534..0e53b12 100644 +--- a/xmlrpc-c-config.test.main ++++ b/xmlrpc-c-config.test.main +@@ -22,10 +22,8 @@ packetsocket_lib= + if test "${ENABLE_LIBXML2_BACKEND}" = "yes"; then + LIBXML=`xml2-config --libs` + else +- LIBXML="${BLDDIR}/lib/expat/xmlparse/libxmlrpc_xmlparse.a" +- sopath="${BLDDIR}/lib/expat/xmlparse:$sopath" +- LIBXML="${LIBXML} ${BLDDIR}/lib/expat/xmltok/libxmlrpc_xmltok.a" +- sopath="${BLDDIR}/lib/expat/xmltok:$sopath" ++ [ -n "${PKG_CONFIG}" ] || PKG_CONFIG=pkg-config ++ LIBXML=`${PKG_CONFIG} --libs expat` + fi + + needCpp=no +-- +2.48.1 + diff --git a/dev-libs/xmlrpc-c/xmlrpc-c-1.59.03-r2.ebuild b/dev-libs/xmlrpc-c/xmlrpc-c-1.59.03-r2.ebuild new file mode 100644 index 000000000000..ed0f2fcb69a7 --- /dev/null +++ b/dev-libs/xmlrpc-c/xmlrpc-c-1.59.03-r2.ebuild @@ -0,0 +1,90 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit autotools toolchain-funcs + +# Upstream maintains 3 release channels: https://xmlrpc-c.sourceforge.net/release.html +# 1. Only the "Super Stable" series is released as a tarball +# 2. SVN tagging of releases seems spotty: https://svn.code.sf.net/p/xmlrpc-c/code/release_number/ +# Because of this, we are following the "Super Stable" release channel + +DESCRIPTION="A lightweight RPC library based on XML and HTTP" +HOMEPAGE="https://xmlrpc-c.sourceforge.net/" +SRC_URI="https://downloads.sourceforge.net/${PN}/${P}.tgz" + +LICENSE="BSD" +SLOT="0/4.59" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-solaris" +IUSE="abyss +cgi +curl +cxx +libxml2 static-libs threads test" +RESTRICT="!test? ( test )" +REQUIRED_USE="test? ( abyss curl cxx )" + +RDEPEND=" + dev-libs/openssl:= + sys-libs/ncurses:= + sys-libs/readline:= + curl? ( net-misc/curl ) + libxml2? ( dev-libs/libxml2 ) +" +DEPEND="${RDEPEND}" + +# configure calls curl-config, hence curl in BDEPEND +BDEPEND=" + virtual/pkgconfig + curl? ( net-misc/curl ) +" + +PATCHES=( + "${FILESDIR}"/${PN}-1.51.06-pkg-config-libxml2.patch + "${FILESDIR}"/${PN}-1.51.06-pkg-config-openssl.patch + "${FILESDIR}"/${PN}-1.59.03-use-system-expat.patch +) + +pkg_setup() { + use curl || ewarn "Curl support disabled: No client library will be built" +} + +src_prepare() { + rm -R lib/expat/ || die + + default + + sed -i \ + -e "/CFLAGS_COMMON/s|-g -O3$||" \ + -e "/CXXFLAGS_COMMON/s|-g$||" \ + common.mk || die + eautoconf +} + +src_configure() { + tc-export PKG_CONFIG + + econf \ + --disable-libwww-client \ + --disable-wininet-client \ + --without-libwww-ssl \ + $(use_enable abyss abyss-server) \ + $(use_enable cgi cgi-server) \ + $(use_enable curl curl-client) \ + $(use_enable cxx cplusplus) \ + $(use_enable libxml2 libxml2-backend) \ + $(use_enable threads abyss-threads) +} + +src_compile() { + default + + # Tools building is broken in this release + #use tools && emake -rC "${S}"/tools +} + +src_install() { + default + + use static-libs || find "${D}" -type f -name \*.a -delete + + # Tools building is broken in this release + #use tools && emake DESTDIR="${D}" -rC "${S}"/tools install +}
