dev-libs/libxslt: Sync with gentoo

It's from gentoo commit 229a5092cf8a418e4a2edae8afcbf2f3e45bde83.

It drops the python dependency.
This commit is contained in:
Krzesimir Nowak 2021-11-17 19:41:30 +01:00
parent a195eddde8
commit 5c20434b8d
12 changed files with 466 additions and 531 deletions

View File

@ -1 +1,2 @@
DIST libxslt-1.1.30.tar.gz 3444029 BLAKE2B 668371393a11c0c16d1549fe771fef7dea96a7208f359578b773c9e7d4c6c4accbe43500e960d58e8f2275682a839582f1f40c1bd984745b8e3944a1d9a97582 SHA512 d24e37398503b6bc29245a993738df51bf3948c4a8f052eedd7eac0a9fcff2d5b54220f37070c46f763e073c34bdb3153c9f129aa0df60c3d7cf7eadbbf15986
DIST libxslt-1.1.34.tar.gz 3552258 BLAKE2B f043a0357e0705ab68041adf4031a6b3e0b5c3d396691c988a34963a0ee0ebe3bede2d1d7a0c5f0c42c046183653c94f4b51e10e35980a039c8cad446e84ad86 SHA512 1516a11ad608b04740674060d2c5d733b88889de5e413b9a4e8bf8d1a90d712149df6d2b1345b615f529d7c7d3fa6dae12e544da828b39c7d415e54c0ee0776b
DIST libxslt-1.1.34.tar.gz.asc 488 BLAKE2B fff407ab2c2bbafa804e5a1f84ca447c706d75fd7489c99ac6040b625d0417a0e6c189be3457e6cc6ecd6b7860829875ea95a132fef24f8a532156361f8a5308 SHA512 9b155d4571daede99cdbf2813a85fb04812737b5e23d3f7c9840225b38f3dbf171623a21645daaee190e7ff9ba38bde932922e96a2a2312c203ffa9917c3baea

View File

@ -1,37 +0,0 @@
From 9608d20739b36087f0e6865cc924769d3b286188 Mon Sep 17 00:00:00 2001
From: Gilles Dartiguelongue <eva@gentoo.org>
Date: Tue, 12 Sep 2017 23:44:35 +0200
Subject: [PATCH] Move XML_CONFIG assignment to unbreak xslt-config
Bug: https://bugs.gentoo.org/630784
---
configure.in | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/configure.in b/configure.in
index e6f649cd..49e6b6cf 100644
--- a/configure.in
+++ b/configure.in
@@ -518,9 +518,6 @@ else
LIBXML_MANUAL_SEARCH=yes
fi
-if test "x$LIBXML_MANUAL_SEARCH" != "xno"
-then
-
dnl
dnl where is xml2-config
dnl
@@ -534,6 +531,9 @@ else
AC_PATH_TOOL([XML_CONFIG], [xml2-config], [false])
fi
+if test "x$LIBXML_MANUAL_SEARCH" != "xno"
+then
+
dnl
dnl imported from libxml2, c.f. #77827
dnl
--
2.14.1

View File

@ -1,33 +0,0 @@
From 06c9dba42097b06a18c81bb54a8da8b2bfaf991d Mon Sep 17 00:00:00 2001
From: Gilles Dartiguelongue <eva@gentoo.org>
Date: Wed, 11 Nov 2015 20:01:14 +0100
Subject: [PATCH 3/3] Disable static module for python module
---
python/Makefile.am | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/python/Makefile.am b/python/Makefile.am
index cc13c62..62afd1b 100644
--- a/python/Makefile.am
+++ b/python/Makefile.am
@@ -27,6 +27,7 @@ python_PYTHON = libxslt.py
pyexec_LTLIBRARIES = libxsltmod.la
libxsltmod_la_CPPFLAGS = \
+ -shared \
-I$(top_srcdir)/libxslt \
-I$(top_srcdir) \
-I$(top_srcdir)/libexslt \
@@ -34,7 +35,7 @@ libxsltmod_la_CPPFLAGS = \
libxsltmod_la_SOURCES = libxslt.c types.c
nodist_libxsltmod_la_SOURCES = libxslt-py.c
libxsltmod_la_LIBADD = $(mylibs) $(PYTHON_LIBS)
-libxsltmod_la_LDFLAGS = $(WIN32_EXTRA_LDFLAGS) $(PYTHON_LDFLAGS) -module -avoid-version
+libxsltmod_la_LDFLAGS = $(WIN32_EXTRA_LDFLAGS) $(PYTHON_LDFLAGS) -module -avoid-version -shared
libxslt.py: $(srcdir)/libxsl.py libxsltclass.py
cat $(srcdir)/libxsl.py libxsltclass.py > $@
--
2.6.3

View File

@ -1,32 +0,0 @@
diff --git a/configure.in b/configure.in
index d6aa366..20aafb8 100644
--- a/configure.in
+++ b/configure.in
@@ -165,11 +165,11 @@ XSLT_LOCALE_XLOCALE=0
XSLT_LOCALE_WINAPI=0
AC_CHECK_HEADERS([locale.h xlocale.h])
-if test $ac_cv_header_xlocale_h = yes; then
+if test $ac_cv_header_locale_h = yes; then
dnl
dnl Check for generic locale_t declaration
dnl
-AC_MSG_CHECKING([if xlocale program link])
+AC_MSG_CHECKING([if locale program link])
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#ifdef HAVE_LOCALE_H
#include <locale.h>
diff --git a/libxslt/xsltlocale.h b/libxslt/xsltlocale.h
index 8a9ca15..2f64424 100644
--- a/libxslt/xsltlocale.h
+++ b/libxslt/xsltlocale.h
@@ -17,7 +17,9 @@
#ifdef XSLT_LOCALE_XLOCALE
#include <locale.h>
+#if defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ < 26
#include <xlocale.h>
+#endif
#ifdef __GLIBC__
/*locale_t is defined only if _GNU_SOURCE is defined*/

View File

@ -1,250 +0,0 @@
From aa0f7a8d59a9bbd646203d3f14e39e217961f725 Mon Sep 17 00:00:00 2001
From: Gilles Dartiguelongue <eva@gentoo.org>
Date: Wed, 11 Nov 2015 17:49:07 +0100
Subject: [PATCH] Simplify python setup in autoconf
AM_PATH_PYTHON does most of the job without using pkg-config as expected
from the rest of the autoconf script.
---
Makefile.am | 14 +++++--
configure.in | 119 ++++++++++++++---------------------------------------
python/Makefile.am | 28 ++++---------
3 files changed, 49 insertions(+), 112 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index ff10f574..65decb3c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,9 +2,13 @@ SUBDIRS = \
libxslt \
libexslt \
xsltproc \
- doc \
- $(PYTHON_SUBDIR) \
- tests
+ doc
+
+if WITH_PYTHON
+SUBDIRS += python
+endif
+
+SUBDIRS += tests
DIST_SUBDIRS = libxslt libexslt xsltproc python doc tests
@@ -51,7 +55,9 @@ tests: dummy
@echo '## Running the regression test suite'
@(cd tests ; $(MAKE) -s tests)
@(cd xsltproc ; $(MAKE) -s tests)
- @(if [ "$(PYTHON_SUBDIR)" != "" ] ; then cd python ; $(MAKE) -s tests ; fi)
+if WITH_PYTHON
+ @(cd python ; $(MAKE) -s tests)
+endif
valgrind:
@echo '## Running the regression tests under Valgrind'
diff --git a/configure.in b/configure.in
index d6aa3664..0a538944 100644
--- a/configure.in
+++ b/configure.in
@@ -293,90 +293,37 @@ dnl
dnl check for python
dnl
-PYTHON_VERSION=
-PYTHON_INCLUDES=
-PYTHON_SITE_PACKAGES=
-pythondir=
-AC_ARG_WITH(python, [ --with-python[=DIR] Build Python bindings if found])
-if test "$with_python" != "no" ; then
- if test -x "$with_python/bin/python"
- then
- echo Found python in $with_python/bin/python
- PYTHON="$with_python/bin/python"
- else
- if test -x "$with_python"
- then
- echo Found python in $with_python
- PYTHON="$with_python"
- else
- if test -x "$PYTHON"
- then
- echo Found python in environment PYTHON=$PYTHON
- with_python=`$PYTHON -c "import sys; print sys.exec_prefix"`
- else
- AC_PATH_PROG(PYTHON, python python2.4 python2.3 python2.2 python2.1 python2.0 python1.6 python1.5)
- fi
- fi
- fi
- if test "$PYTHON" != ""
- then
- echo "PYTHON is pointing at $PYTHON"
- PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
- echo Found Python version $PYTHON_VERSION
- LIBXML2_PYTHON=`$PYTHON -c "try : import libxml2 ; print 1
-except: print 0"`
- if test "$LIBXML2_PYTHON" = "1"
- then
- echo Found libxml2-python module
- else
- echo Warning: Missing libxml2-python
- fi
- fi
- if test "$PYTHON_VERSION" != ""
- then
- if test -r $with_python/include/python$PYTHON_VERSION/Python.h -a \
- -d $with_python/lib/python$PYTHON_VERSION/site-packages
- then
- PYTHON_INCLUDES=$with_python/include/python$PYTHON_VERSION
- PYTHON_SITE_PACKAGES='$(libdir)/python$(PYTHON_VERSION)/site-packages'
- else
- if test -r $prefix/include/python$PYTHON_VERSION/Python.h
- then
- PYTHON_INCLUDES=$prefix/include/python$PYTHON_VERSION
- PYTHON_SITE_PACKAGES='$(libdir)/python$(PYTHON_VERSION)/site-packages'
- else
- if test -r /usr/include/python$PYTHON_VERSION/Python.h
- then
- PYTHON_INCLUDES=/usr/include/python$PYTHON_VERSION
- PYTHON_SITE_PACKAGES='$(libdir)/python$(PYTHON_VERSION)/site-packages'
- else
- echo could not find python$PYTHON_VERSION/Python.h
- fi
- fi
- if test ! -d "$PYTHON_SITE_PACKAGES"
- then
- PYTHON_SITE_PACKAGES=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib()"`
- fi
- fi
- PYTHON_LIBS=`python$PYTHON_VERSION-config --libs`
- fi
- if test "$with_python" != ""
- then
- pythondir='$(PYTHON_SITE_PACKAGES)'
- else
- pythondir='$(libdir)/python$(PYTHON_VERSION)/site-packages'
- fi
-fi
-AM_CONDITIONAL(WITH_PYTHON, test "$PYTHON_INCLUDES" != "")
-if test "$PYTHON_INCLUDES" != ""
-then
- PYTHON_SUBDIR=python
-else
- PYTHON_SUBDIR=
-fi
-AC_SUBST(pythondir)
-AC_SUBST(PYTHON_SUBDIR)
-AC_SUBST(PYTHON_LIBS)
+AC_ARG_WITH([python],
+ AS_HELP_STRING([--with-python], [Build Python bindings if found])
+)
+
+AS_IF([test "$with_python" = "yes"],
+ [AM_PATH_PYTHON
+ AC_PATH_TOOL([PYTHON_CONFIG], [python$PYTHON_VERSION-config], [no])
+ AS_IF([test "$PYTHON_CONFIG" = "no"],
+ [AC_PATH_TOOL([PYTHON_CONFIG], [python-config], [no])])
+ AS_IF([test "$PYTHON_CONFIG" != "no"],
+ [PYTHON_CFLAGS=`$PYTHON_CONFIG --cflags`
+ PYTHON_LDFLAGS=`$PYTHON_CONFIG --ldflags`
+ PYTHON_LIBS=`$PYTHON_CONFIG --libs`],
+ [AC_MSG_ERROR([Missing python development files.])])
+ AC_MSG_CHECKING([libxml2 module in $PYTHON])
+ LIBXML2_PYTHON=`$PYTHON -c "import sys;
+try:
+ import libxml2
+ sys.stdout.write('1')
+except:
+ sys.stdout.write('0')"`
+ AS_IF([test "$LIBXML2_PYTHON" = "1"],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])
+ AC_MSG_WARN([libxml2 python module not found, expect runtime errors])])
+ ])
+
+AM_CONDITIONAL([WITH_PYTHON], [test "$with_python" = "yes"])
+AC_SUBST([PYTHON_CFLAGS])
+AC_SUBST([PYTHON_LDFLAGS])
+AC_SUBST([PYTHON_LIBS])
AC_ARG_WITH(crypto, [ --with-crypto Add crypto support to exslt (on)])
WITH_CRYPTO=0
@@ -678,10 +625,6 @@ AC_SUBST(PYTHONSODV)
AC_SUBST(XML_CONFIG)
AC_SUBST(LIBXML_LIBS)
AC_SUBST(LIBXML_CFLAGS)
-AC_SUBST(PYTHON)
-AC_SUBST(PYTHON_VERSION)
-AC_SUBST(PYTHON_INCLUDES)
-AC_SUBST(PYTHON_SITE_PACKAGES)
XSLT_LIBDIR='-L${libdir}'
XSLT_INCLUDEDIR='-I${includedir}'
diff --git a/python/Makefile.am b/python/Makefile.am
index fa58b78f..3a5ecd6a 100644
--- a/python/Makefile.am
+++ b/python/Makefile.am
@@ -5,9 +5,9 @@ SUBDIRS= . tests
AM_CFLAGS = $(LIBXML_CFLAGS)
-DOCS_DIR = $(datadir)/doc/libxslt-python-$(LIBXSLT_VERSION)
+docsdir = $(datadir)/doc/libxslt-python-$(LIBXSLT_VERSION)
# libxsltclass.txt is generated
-DOCS = TODO
+dist_docs_DATA = TODO
EXTRA_DIST = \
libxslt.c \
@@ -16,10 +16,7 @@ EXTRA_DIST = \
libxml_wrap.h \
libxslt_wrap.h \
libxsl.py \
- libxslt-python-api.xml \
- $(DOCS)
-
-libxsltmod_la_LDFLAGS = $(WIN32_EXTRA_LDFLAGS) -module -avoid-version
+ libxslt-python-api.xml
if WITH_PYTHON
mylibs = \
@@ -28,31 +25,22 @@ mylibs = \
all-local: libxslt.py
-python_LTLIBRARIES = libxsltmod.la
+python_PYTHON = libxslt.py
+pyexec_LTLIBRARIES = libxsltmod.la
libxsltmod_la_CPPFLAGS = \
- -I$(PYTHON_INCLUDES) \
-I$(top_srcdir)/libxslt \
-I$(top_srcdir) \
- -I../libexslt
+ -I$(top_srcdir)/libexslt \
+ $(PYTHON_CFLAGS)
libxsltmod_la_SOURCES = libxslt.c types.c
nodist_libxsltmod_la_SOURCES = libxslt-py.c
libxsltmod_la_LIBADD = $(mylibs) $(PYTHON_LIBS)
+libxsltmod_la_LDFLAGS = $(WIN32_EXTRA_LDFLAGS) $(PYTHON_LDFLAGS) -module -avoid-version
libxslt.py: $(srcdir)/libxsl.py libxsltclass.py
cat $(srcdir)/libxsl.py libxsltclass.py > $@
-install-data-local:
- $(MKDIR_P) $(DESTDIR)$(pythondir)
- $(INSTALL) -m 0644 libxslt.py $(DESTDIR)$(pythondir)
- $(MKDIR_P) $(DESTDIR)$(DOCS_DIR)
- @(for doc in $(DOCS) ; \
- do $(INSTALL) -m 0644 $(srcdir)/$$doc $(DESTDIR)$(DOCS_DIR) ; done)
-
-uninstall-local:
- rm -f $(DESTDIR)$(pythondir)/libxslt.py
- rm -rf $(DESTDIR)$(DOCS_DIR)
-
GENERATE = generator.py
API_DESC = $(top_srcdir)/doc/libxslt-api.xml $(srcdir)/libxslt-python-api.xml
GENERATED= libxsltclass.py \
--
2.14.1

View File

@ -0,0 +1,194 @@
https://gitlab.gnome.org/GNOME/libxslt/-/issues/56
https://gitlab.gnome.org/GNOME/libxslt/-/commit/50f9c9cd3b7dfe9b3c8c795247752d1fdcadcac8
https://gitlab.gnome.org/GNOME/libxslt/-/issues/51
https://bugs.gentoo.org/790218
From: Nick Wellnhofer <wellnhofer@aevum.de>
Date: Sat, 12 Jun 2021 20:02:53 +0200
Subject: [PATCH] Fix use-after-free in xsltApplyTemplates
xsltApplyTemplates without a select expression could delete nodes in
the source document.
1. Text nodes with strippable whitespace
Whitespace from input documents is already stripped, so there's no
need to strip it again. Under certain circumstances, xsltApplyTemplates
could be fooled into deleting text nodes that are still referenced,
resulting in a use-after-free.
2. The DTD
The DTD was only unlinked, but there's no good reason to do this just
now. Maybe it was meant as a micro-optimization.
3. Unknown nodes
Useless and dangerous as well, especially with XInclude nodes.
See https://gitlab.gnome.org/GNOME/libxml2/-/issues/268
Simply stop trying to uselessly delete nodes when applying a template.
This part of the code is probably a leftover from a time where
xsltApplyStripSpaces wasn't implemented yet. Also note that
xsltApplyTemplates with a select expression never tried to delete
nodes.
Also stop xsltDefaultProcessOneNode from deleting nodes for the same
reasons.
This fixes CVE-2021-30560.
--- a/libxslt/transform.c
+++ b/libxslt/transform.c
@@ -1895,7 +1895,7 @@ static void
xsltDefaultProcessOneNode(xsltTransformContextPtr ctxt, xmlNodePtr node,
xsltStackElemPtr params) {
xmlNodePtr copy;
- xmlNodePtr delete = NULL, cur;
+ xmlNodePtr cur;
int nbchild = 0, oldSize;
int childno = 0, oldPos;
xsltTemplatePtr template;
@@ -1968,54 +1968,13 @@ xsltDefaultProcessOneNode(xsltTransformContextPtr ctxt, xmlNodePtr node,
return;
}
/*
- * Handling of Elements: first pass, cleanup and counting
+ * Handling of Elements: first pass, counting
*/
cur = node->children;
while (cur != NULL) {
- switch (cur->type) {
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
- case XML_ELEMENT_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- nbchild++;
- break;
- case XML_DTD_NODE:
- /* Unlink the DTD, it's still reachable using doc->intSubset */
- if (cur->next != NULL)
- cur->next->prev = cur->prev;
- if (cur->prev != NULL)
- cur->prev->next = cur->next;
- break;
- default:
-#ifdef WITH_XSLT_DEBUG_PROCESS
- XSLT_TRACE(ctxt,XSLT_TRACE_PROCESS_NODE,xsltGenericDebug(xsltGenericDebugContext,
- "xsltDefaultProcessOneNode: skipping node type %d\n",
- cur->type));
-#endif
- delete = cur;
- }
+ if (IS_XSLT_REAL_NODE(cur))
+ nbchild++;
cur = cur->next;
- if (delete != NULL) {
-#ifdef WITH_XSLT_DEBUG_PROCESS
- XSLT_TRACE(ctxt,XSLT_TRACE_PROCESS_NODE,xsltGenericDebug(xsltGenericDebugContext,
- "xsltDefaultProcessOneNode: removing ignorable blank node\n"));
-#endif
- xmlUnlinkNode(delete);
- xmlFreeNode(delete);
- delete = NULL;
- }
- }
- if (delete != NULL) {
-#ifdef WITH_XSLT_DEBUG_PROCESS
- XSLT_TRACE(ctxt,XSLT_TRACE_PROCESS_NODE,xsltGenericDebug(xsltGenericDebugContext,
- "xsltDefaultProcessOneNode: removing ignorable blank node\n"));
-#endif
- xmlUnlinkNode(delete);
- xmlFreeNode(delete);
- delete = NULL;
}
/*
@@ -4864,7 +4823,7 @@ xsltApplyTemplates(xsltTransformContextPtr ctxt, xmlNodePtr node,
xsltStylePreCompPtr comp = (xsltStylePreCompPtr) castedComp;
#endif
int i;
- xmlNodePtr cur, delNode = NULL, oldContextNode;
+ xmlNodePtr cur, oldContextNode;
xmlNodeSetPtr list = NULL, oldList;
xsltStackElemPtr withParams = NULL;
int oldXPProximityPosition, oldXPContextSize;
@@ -4998,73 +4957,9 @@ xsltApplyTemplates(xsltTransformContextPtr ctxt, xmlNodePtr node,
else
cur = NULL;
while (cur != NULL) {
- switch (cur->type) {
- case XML_TEXT_NODE:
- if ((IS_BLANK_NODE(cur)) &&
- (cur->parent != NULL) &&
- (cur->parent->type == XML_ELEMENT_NODE) &&
- (ctxt->style->stripSpaces != NULL)) {
- const xmlChar *val;
-
- if (cur->parent->ns != NULL) {
- val = (const xmlChar *)
- xmlHashLookup2(ctxt->style->stripSpaces,
- cur->parent->name,
- cur->parent->ns->href);
- if (val == NULL) {
- val = (const xmlChar *)
- xmlHashLookup2(ctxt->style->stripSpaces,
- BAD_CAST "*",
- cur->parent->ns->href);
- }
- } else {
- val = (const xmlChar *)
- xmlHashLookup2(ctxt->style->stripSpaces,
- cur->parent->name, NULL);
- }
- if ((val != NULL) &&
- (xmlStrEqual(val, (xmlChar *) "strip"))) {
- delNode = cur;
- break;
- }
- }
- /* Intentional fall-through */
- case XML_ELEMENT_NODE:
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- xmlXPathNodeSetAddUnique(list, cur);
- break;
- case XML_DTD_NODE:
- /* Unlink the DTD, it's still reachable
- * using doc->intSubset */
- if (cur->next != NULL)
- cur->next->prev = cur->prev;
- if (cur->prev != NULL)
- cur->prev->next = cur->next;
- break;
- case XML_NAMESPACE_DECL:
- break;
- default:
-#ifdef WITH_XSLT_DEBUG_PROCESS
- XSLT_TRACE(ctxt,XSLT_TRACE_APPLY_TEMPLATES,xsltGenericDebug(xsltGenericDebugContext,
- "xsltApplyTemplates: skipping cur type %d\n",
- cur->type));
-#endif
- delNode = cur;
- }
+ if (IS_XSLT_REAL_NODE(cur))
+ xmlXPathNodeSetAddUnique(list, cur);
cur = cur->next;
- if (delNode != NULL) {
-#ifdef WITH_XSLT_DEBUG_PROCESS
- XSLT_TRACE(ctxt,XSLT_TRACE_APPLY_TEMPLATES,xsltGenericDebug(xsltGenericDebugContext,
- "xsltApplyTemplates: removing ignorable blank cur\n"));
-#endif
- xmlUnlinkNode(delNode);
- xmlFreeNode(delNode);
- delNode = NULL;
- }
}
}
GitLab

View File

@ -0,0 +1,120 @@
https://gitlab.gnome.org/GNOME/libxslt/-/commit/9ae2f94df1721e002941b40665efb762aefcea1a
https://gitlab.gnome.org/GNOME/libxslt/-/commit/824657768aea2cce9c23e72ba8085cb5e44350c7
https://gitlab.gnome.org/GNOME/libxslt/-/commit/77c26bad0433541f486b1e7ced44ca9979376908
From: Nick Wellnhofer <wellnhofer@aevum.de>
Date: Mon, 17 Aug 2020 03:42:11 +0200
Subject: [PATCH] Stop using maxParserDepth XPath limit
This will be removed again from libxml2.
--- a/tests/fuzz/fuzz.c
+++ b/tests/fuzz/fuzz.c
@@ -183,8 +183,7 @@ xsltFuzzXPathInit(int *argc_p ATTRIBUTE_UNUSED, char ***argv_p,
xpctxt = tctxt->xpathCtxt;
/* Resource limits to avoid timeouts and call stack overflows */
- xpctxt->maxParserDepth = 15;
- xpctxt->maxDepth = 100;
+ xpctxt->maxDepth = 500;
xpctxt->opLimit = 500000;
/* Test namespaces used in xpath.xml */
@@ -317,8 +316,7 @@ xsltFuzzXsltInit(int *argc_p ATTRIBUTE_UNUSED, char ***argv_p,
static void
xsltSetXPathResourceLimits(xmlXPathContextPtr ctxt) {
- ctxt->maxParserDepth = 15;
- ctxt->maxDepth = 100;
+ ctxt->maxDepth = 200;
ctxt->opLimit = 100000;
}
From: Nick Wellnhofer <wellnhofer@aevum.de>
Date: Mon, 17 Aug 2020 04:27:13 +0200
Subject: [PATCH] Transfer XPath limits to XPtr context
Expressions like document('doc.xml#xpointer(evil_expr)') ignored the
XPath limits.
--- a/libxslt/functions.c
+++ b/libxslt/functions.c
@@ -178,10 +178,22 @@ xsltDocumentFunctionLoadDocument(xmlXPathParserContextPtr ctxt, xmlChar* URI)
goto out_fragment;
}
+#if LIBXML_VERSION >= 20911 || \
+ defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
+ xptrctxt->opLimit = ctxt->context->opLimit;
+ xptrctxt->opCount = ctxt->context->opCount;
+ xptrctxt->maxDepth = ctxt->context->maxDepth - ctxt->context->depth;
+
+ resObj = xmlXPtrEval(fragment, xptrctxt);
+
+ ctxt->context->opCount = xptrctxt->opCount;
+#else
resObj = xmlXPtrEval(fragment, xptrctxt);
- xmlXPathFreeContext(xptrctxt);
#endif
+ xmlXPathFreeContext(xptrctxt);
+#endif /* LIBXML_XPTR_ENABLED */
+
if (resObj == NULL)
goto out_fragment;
From: Nick Wellnhofer <wellnhofer@aevum.de>
Date: Wed, 26 Aug 2020 00:34:38 +0200
Subject: [PATCH] Don't set maxDepth in XPath contexts
The maximum recursion depth is hardcoded in libxml2 now.
--- a/libxslt/functions.c
+++ b/libxslt/functions.c
@@ -182,7 +182,7 @@ xsltDocumentFunctionLoadDocument(xmlXPathParserContextPtr ctxt, xmlChar* URI)
defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
xptrctxt->opLimit = ctxt->context->opLimit;
xptrctxt->opCount = ctxt->context->opCount;
- xptrctxt->maxDepth = ctxt->context->maxDepth - ctxt->context->depth;
+ xptrctxt->depth = ctxt->context->depth;
resObj = xmlXPtrEval(fragment, xptrctxt);
--- a/tests/fuzz/fuzz.c
+++ b/tests/fuzz/fuzz.c
@@ -183,7 +183,6 @@ xsltFuzzXPathInit(int *argc_p ATTRIBUTE_UNUSED, char ***argv_p,
xpctxt = tctxt->xpathCtxt;
/* Resource limits to avoid timeouts and call stack overflows */
- xpctxt->maxDepth = 500;
xpctxt->opLimit = 500000;
/* Test namespaces used in xpath.xml */
@@ -314,12 +313,6 @@ xsltFuzzXsltInit(int *argc_p ATTRIBUTE_UNUSED, char ***argv_p,
return 0;
}
-static void
-xsltSetXPathResourceLimits(xmlXPathContextPtr ctxt) {
- ctxt->maxDepth = 200;
- ctxt->opLimit = 100000;
-}
-
xmlChar *
xsltFuzzXslt(const char *data, size_t size) {
xmlDocPtr xsltDoc;
@@ -349,7 +342,7 @@ xsltFuzzXslt(const char *data, size_t size) {
xmlFreeDoc(xsltDoc);
return NULL;
}
- xsltSetXPathResourceLimits(sheet->xpathCtxt);
+ sheet->xpathCtxt->opLimit = 100000;
sheet->xpathCtxt->opCount = 0;
if (xsltParseStylesheetUser(sheet, xsltDoc) != 0) {
xsltFreeStylesheet(sheet);
@@ -361,7 +354,7 @@ xsltFuzzXslt(const char *data, size_t size) {
xsltSetCtxtSecurityPrefs(sec, ctxt);
ctxt->maxTemplateDepth = 100;
ctxt->opLimit = 20000;
- xsltSetXPathResourceLimits(ctxt->xpathCtxt);
+ ctxt->xpathCtxt->opLimit = 100000;
ctxt->xpathCtxt->opCount = sheet->xpathCtxt->opCount;
result = xsltApplyStylesheetUser(sheet, doc, NULL, NULL, NULL, ctxt);

View File

@ -1,38 +0,0 @@
diff -ur libxslt-1.1.26.orig/libxslt.m4 libxslt-1.1.26/libxslt.m4
--- libxslt-1.1.26.orig/libxslt.m4 2009-05-12 09:29:34.000000000 +0300
+++ libxslt-1.1.26/libxslt.m4 2009-10-07 17:03:04.000000000 +0300
@@ -52,8 +52,10 @@
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
if test "x$enable_xslttest" = "xyes" ; then
ac_save_CFLAGS="$CFLAGS"
+ ac_save_CXXFLAGS="$CXXFLAGS"
ac_save_LIBS="$LIBS"
CFLAGS="$CFLAGS $XSLT_CFLAGS"
+ CXXFLAGS="$CXXFLAGS $XSLT_CFLAGS"
LIBS="$XSLT_LIBS $LIBS"
dnl
dnl Now check if the installed libxslt is sufficiently new.
@@ -138,6 +140,7 @@
}
],, no_xslt=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
CFLAGS="$ac_save_CFLAGS"
+ CXXFLAGS="$ac_save_CXXFLAGS"
LIBS="$ac_save_LIBS"
fi
fi
@@ -158,6 +161,7 @@
else
echo "*** Could not run libxslt test program, checking why..."
CFLAGS="$CFLAGS $XSLT_CFLAGS"
+ CXXFLAGS="$CXXFLAGS $XSLT_CFLAGS"
LIBS="$LIBS $XSLT_LIBS"
AC_TRY_LINK([
#include <libxslt/xslt.h>
@@ -177,6 +181,7 @@
echo "*** or that you have moved LIBXSLT since it was installed. In the latter case, you"
echo "*** may want to edit the xslt-config script: $XSLT_CONFIG" ])
CFLAGS="$ac_save_CFLAGS"
+ CXXFLAGS="$ac_save_CXXFLAGS"
LIBS="$ac_save_LIBS"
fi
fi

View File

@ -1,136 +0,0 @@
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI=6
PYTHON_COMPAT=( python2_7 )
PYTHON_REQ_USE="xml"
inherit autotools ltprune python-r1 toolchain-funcs multilib-minimal
DESCRIPTION="XSLT libraries and tools"
HOMEPAGE="http://www.xmlsoft.org/"
SRC_URI="ftp://xmlsoft.org/${PN}/${P}.tar.gz"
LICENSE="MIT"
SLOT="0"
KEYWORDS="alpha amd64 arm arm64 hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~ppc-aix ~x64-cygwin ~amd64-fbsd ~x86-fbsd ~amd64-linux ~arm-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
IUSE="crypt debug examples python static-libs elibc_Darwin"
REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
RDEPEND="
>=dev-libs/libxml2-2.9.1-r5:2[${MULTILIB_USEDEP}]
crypt? ( >=dev-libs/libgcrypt-1.5.3:0=[${MULTILIB_USEDEP}] )
python? (
${PYTHON_DEPS}
dev-libs/libxml2:2[python,${PYTHON_USEDEP}] )
"
DEPEND="${RDEPEND}"
MULTILIB_CHOST_TOOLS=(
/usr/bin/xslt-config
)
MULTILIB_WRAPPED_HEADERS=(
/usr/include/libxslt/xsltconfig.h
)
src_prepare() {
default
DOCS=( AUTHORS ChangeLog FEATURES NEWS README TODO )
# https://bugzilla.gnome.org/show_bug.cgi?id=684621
eapply "${FILESDIR}"/${PN}.m4-${PN}-1.1.26.patch
# Simplify python setup
# https://bugzilla.gnome.org/show_bug.cgi?id=758095
eapply "${FILESDIR}"/${PN}-1.1.30-simplify-python.patch
eapply "${FILESDIR}"/${PN}-1.1.28-disable-static-modules.patch
# Fix xslt-config
# https://bugs.gentoo.org/630784
eapply "${FILESDIR}"/1.1.30-unbreak-xslt-config.patch
# Fix build and headers with glibc-2.26, bug 632214, breaks Darwin
use elibc_Darwin || eapply "${FILESDIR}"/${PN}-1.1.30-glibc226.patch
mv configure.{in,ac} || die
eautoreconf
# If eautoreconf'd with new autoconf, then epunt_cxx is not necessary
# and it is propably otherwise too if upstream generated with new
# autoconf
# epunt_cxx
# But Prefix always needs elibtoolize if not eautoreconf'd.
# elibtoolize
}
multilib_src_configure() {
libxslt_configure() {
ECONF_SOURCE="${S}" econf \
--with-html-dir="${EPREFIX}"/usr/share/doc/${PF} \
--with-html-subdir=html \
$(use_with crypt crypto) \
$(use_with debug) \
$(use_with debug mem-debug) \
$(use_enable static-libs static) \
"$@"
}
libxslt_py_configure() {
mkdir -p "${BUILD_DIR}" || die # ensure python build dirs exist
run_in_build_dir libxslt_configure --with-python
}
libxslt_configure --without-python # build python bindings separately
if multilib_is_native_abi && use python; then
python_foreach_impl libxslt_py_configure
fi
}
multilib_src_compile() {
default
multilib_is_native_abi && use python && libxslt_foreach_py_emake all
}
multilib_src_test() {
default
multilib_is_native_abi && use python && libxslt_foreach_py_emake test
}
multilib_src_install() {
# "default" does not work here - docs are installed by multilib_src_install_all
emake DESTDIR="${D}" install
if multilib_is_native_abi && use python; then
libxslt_foreach_py_emake \
DESTDIR="${D}" \
docsdir="${EPREFIX}"/usr/share/doc/${PF}/python \
EXAMPLE_DIR="${EPREFIX}"/usr/share/doc/${PF}/python/examples \
install
python_foreach_impl python_optimize
fi
}
multilib_src_install_all() {
einstalldocs
if ! use examples; then
rm -rf "${ED}"/usr/share/doc/${PF}/examples
rm -rf "${ED}"/usr/share/doc/${PF}/python/examples
fi
prune_libtool_files --modules
}
libxslt_foreach_py_emake() {
libxslt_py_emake() {
pushd "${BUILD_DIR}/python" > /dev/null || die
emake "$@"
popd > /dev/null
}
local native_builddir=${BUILD_DIR}
python_foreach_impl libxslt_py_emake top_builddir="${native_builddir}" "$@"
}

View File

@ -0,0 +1,67 @@
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
VERIFY_SIG_OPENPGP_KEY_PATH=${BROOT}/usr/share/openpgp-keys/danielveillard.asc
inherit libtool multilib-minimal verify-sig
# Note: Please bump this in sync with dev-libs/libxml2.
DESCRIPTION="XSLT libraries and tools"
HOMEPAGE="http://www.xmlsoft.org/ https://gitlab.gnome.org/GNOME/libxslt"
SRC_URI="ftp://xmlsoft.org/${PN}/${P}.tar.gz"
SRC_URI+=" verify-sig? ( ftp://xmlsoft.org/${PN}/${P}.tar.gz.asc )"
LICENSE="MIT"
SLOT="0"
KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
IUSE="crypt debug examples static-libs elibc_Darwin"
BDEPEND=">=virtual/pkgconfig-1
verify-sig? ( app-crypt/openpgp-keys-danielveillard )"
RDEPEND="
>=dev-libs/libxml2-2.9.10:2[${MULTILIB_USEDEP}]
crypt? ( >=dev-libs/libgcrypt-1.5.3:0=[${MULTILIB_USEDEP}] )
"
DEPEND="${RDEPEND}"
MULTILIB_CHOST_TOOLS=(
/usr/bin/xslt-config
)
MULTILIB_WRAPPED_HEADERS=(
/usr/include/libxslt/xsltconfig.h
)
src_prepare() {
default
DOCS=( AUTHORS ChangeLog FEATURES NEWS README TODO )
# Prefix always needs elibtoolize if not eautoreconf'd.
elibtoolize
}
multilib_src_configure() {
# Python bindings were dropped as they were Python 2 only at the time
ECONF_SOURCE="${S}" econf \
--with-html-dir="${EPREFIX}"/usr/share/doc/${PF} \
--with-html-subdir=html \
--without-python \
$(use_with crypt crypto) \
$(use_with debug) \
$(use_with debug mem-debug) \
$(use_enable static-libs static) \
"$@"
}
multilib_src_install() {
# "default" does not work here - docs are installed by multilib_src_install_all
emake DESTDIR="${D}" install
}
multilib_src_install_all() {
einstalldocs
find "${ED}" -type f -name "*.la" -delete || die
}

View File

@ -0,0 +1,72 @@
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
VERIFY_SIG_OPENPGP_KEY_PATH=${BROOT}/usr/share/openpgp-keys/danielveillard.asc
inherit libtool multilib-minimal verify-sig
# Note: Please bump this in sync with dev-libs/libxml2.
DESCRIPTION="XSLT libraries and tools"
HOMEPAGE="http://www.xmlsoft.org/ https://gitlab.gnome.org/GNOME/libxslt"
SRC_URI="ftp://xmlsoft.org/${PN}/${P}.tar.gz"
SRC_URI+=" verify-sig? ( ftp://xmlsoft.org/${PN}/${P}.tar.gz.asc )"
LICENSE="MIT"
SLOT="0"
KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
IUSE="crypt debug examples static-libs elibc_Darwin"
BDEPEND=">=virtual/pkgconfig-1
verify-sig? ( app-crypt/openpgp-keys-danielveillard )"
RDEPEND="
>=dev-libs/libxml2-2.9.11:2[${MULTILIB_USEDEP}]
crypt? ( >=dev-libs/libgcrypt-1.5.3:0=[${MULTILIB_USEDEP}] )
"
DEPEND="${RDEPEND}"
MULTILIB_CHOST_TOOLS=(
/usr/bin/xslt-config
)
MULTILIB_WRAPPED_HEADERS=(
/usr/include/libxslt/xsltconfig.h
)
PATCHES=(
"${FILESDIR}"/${P}-libxml2-2.9.12.patch
"${FILESDIR}"/${P}-CVE-2021-30560.patch
)
src_prepare() {
default
DOCS=( AUTHORS ChangeLog FEATURES NEWS README TODO )
# Prefix always needs elibtoolize if not eautoreconf'd.
elibtoolize
}
multilib_src_configure() {
# Python bindings were dropped as they were Python 2 only at the time
ECONF_SOURCE="${S}" econf \
--with-html-dir="${EPREFIX}"/usr/share/doc/${PF} \
--with-html-subdir=html \
--without-python \
$(use_with crypt crypto) \
$(use_with debug) \
$(use_with debug mem-debug) \
$(use_enable static-libs static) \
"$@"
}
multilib_src_install() {
# "default" does not work here - docs are installed by multilib_src_install_all
emake DESTDIR="${D}" install
}
multilib_src_install_all() {
einstalldocs
find "${ED}" -type f -name "*.la" -delete || die
}

View File

@ -1,8 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="project">
<email>gnome@gentoo.org</email>
<name>Gentoo GNOME Desktop</name>
<maintainer type="person">
<email>sam@gentoo.org</email>
<name>Sam James</name>
</maintainer>
<maintainer type="project">
<email>base-system@gentoo.org</email>
<name>Gentoo Base System</name>
</maintainer>
<upstream>
<remote-id type="cpe">cpe:/a:xmlsoft:libxslt</remote-id>
</upstream>
</pkgmetadata>