kde/Plasma: libxml2-PIC/shared variante (libqalculate linkea en .so) + ktexteditor +kbookmarks

This commit is contained in:
2026-07-13 17:22:52 -04:00
parent b4ec0846cd
commit ea206de8ed
4 changed files with 146 additions and 1 deletions
@@ -0,0 +1,84 @@
--- a/testparser.c
+++ b/testparser.c
@@ -11,6 +11,7 @@
#include <libxml/xmlreader.h>
#include <libxml/xmlwriter.h>
#include <libxml/HTMLparser.h>
+#include <libxml/xmlschemas.h>
#include <string.h>
@@ -777,6 +778,63 @@
}
#endif /* WIN32 */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+/*
+ * Regression test for CVE-2026-6732: a type confusion in xmlParseReference
+ * crashed a schema-validating xmlTextReader whenever the document expanded
+ * an internal entity. Without the fix this triggers SIGSEGV on the first
+ * read; with the fix the entity expansion is read and the schema correctly
+ * reports the substituted content as invalid against xs:integer.
+ *
+ * Backport of upstream commit 7cea3fd1 adapted for the libxml2 2.13
+ * testparser.c layout (which predates the testReaderSchemaResourceLoader
+ * helper that upstream uses as an anchor on master).
+ */
+static int
+testReaderSchemaEntityExpansion(void) {
+ static const char xsd[] =
+ "<?xml version='1.0'?>\n"
+ "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>\n"
+ " <xs:element name='e' type='xs:integer'/>\n"
+ "</xs:schema>\n";
+ static const char xml[] =
+ "<!DOCTYPE e [<!ENTITY n \"not-an-int\">]>\n"
+ "<e>&n;</e>";
+ xmlSchemaParserCtxtPtr spc;
+ xmlSchemaPtr schema;
+ xmlTextReaderPtr reader;
+ int err = 0;
+ int ret;
+
+ spc = xmlSchemaNewMemParserCtxt(xsd, (int) sizeof(xsd) - 1);
+ schema = xmlSchemaParse(spc);
+ xmlSchemaFreeParserCtxt(spc);
+ if (schema == NULL) {
+ fprintf(stderr, "xmlSchemaParse failed\n");
+ return 1;
+ }
+
+ reader = xmlReaderForMemory(xml, (int) sizeof(xml) - 1, "doc.xml", NULL,
+ XML_PARSE_NOENT | XML_PARSE_DTDLOAD);
+ xmlTextReaderSetSchema(reader, schema);
+
+ while ((ret = xmlTextReaderRead(reader)) == 1)
+ ;
+ if (ret != 0) {
+ fprintf(stderr, "reader failed on entity-expanded document\n");
+ err = 1;
+ }
+ if (xmlTextReaderIsValid(reader) != 0) {
+ fprintf(stderr, "schema missed invalid entity-expanded text\n");
+ err = 1;
+ }
+
+ xmlFreeTextReader(reader);
+ xmlSchemaFree(schema);
+ return err;
+}
+#endif
+
int
main(void) {
int err = 0;
@@ -807,6 +865,9 @@
#ifdef LIBXML_XINCLUDE_ENABLED
err |= testReaderXIncludeError();
#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+ err |= testReaderSchemaEntityExpansion();
+#endif
#endif
#ifdef LIBXML_WRITER_ENABLED
err |= testWriterClose();
+32
View File
@@ -0,0 +1,32 @@
diff --git a/parser.c b/parser.c
index 6e7621a86b5b9256b7a068f09a7e1650e7264aa5..85bc39b1c2739574ab90fde34a24459e5ef9928f 100644
--- a/parser.c
+++ b/parser.c
@@ -7261,10 +7261,10 @@ xmlParseReference(xmlParserCtxt *ctxt) {
if ((cur->type == XML_TEXT_NODE) ||
(ctxt->options & XML_PARSE_NOCDATA)) {
if (ctxt->sax->characters != NULL)
- ctxt->sax->characters(ctxt, cur->content, len);
+ ctxt->sax->characters(ctxt->userData, cur->content, len);
} else {
if (ctxt->sax->cdataBlock != NULL)
- ctxt->sax->cdataBlock(ctxt, cur->content, len);
+ ctxt->sax->cdataBlock(ctxt->userData, cur->content, len);
}
cur = cur->next;
@@ -7284,10 +7284,12 @@ xmlParseReference(xmlParserCtxt *ctxt) {
if ((cur->type == XML_TEXT_NODE) ||
(ctxt->options & XML_PARSE_NOCDATA)) {
if (ctxt->sax->characters != NULL)
- ctxt->sax->characters(ctxt, cur->content, len);
+ ctxt->sax->characters(ctxt->userData, cur->content,
+ len);
} else {
if (ctxt->sax->cdataBlock != NULL)
- ctxt->sax->cdataBlock(ctxt, cur->content, len);
+ ctxt->sax->cdataBlock(ctxt->userData, cur->content,
+ len);
}
break;
+1 -1
View File
@@ -52,4 +52,4 @@ install = "DESTDIR=/out cmake --install build"
# NOTA: faltan "ksyntaxhighlighting" y "qtspeech" en [deps].build (sellar primero, ver cabecera).
[deps]
build = ["cmake", "samurai", "python3", "pkgconf", "qtbase", "dbus", "extra-cmake-modules", "qttools", "mesa", "libdrm", "libxkbcommon", "wayland", "gettext-tiny", "qtdeclarative", "qtsvg", "kio", "kparts", "karchive", "kconfig", "kguiaddons", "ki18n", "sonnet", "kcolorscheme", "kauth", "kcoreaddons", "kwidgetsaddons", "kcodecs", "kservice", "kcompletion", "kconfigwidgets", "kwindowsystem", "libX11", "xorgproto", "libXau", "libXdmcp", "libXext", "libXrender", "libXfixes", "libXi", "libxcb", "syntax-highlighting", "qtspeech", "qtmultimedia"]
build = ["cmake", "samurai", "python3", "pkgconf", "qtbase", "dbus", "extra-cmake-modules", "qttools", "mesa", "libdrm", "libxkbcommon", "wayland", "gettext-tiny", "qtdeclarative", "qtsvg", "kio", "kparts", "karchive", "kconfig", "kguiaddons", "ki18n", "sonnet", "kcolorscheme", "kauth", "kcoreaddons", "kwidgetsaddons", "kcodecs", "kservice", "kcompletion", "kconfigwidgets", "kwindowsystem", "libX11", "xorgproto", "libXau", "libXdmcp", "libXext", "libXrender", "libXfixes", "libXi", "libxcb", "syntax-highlighting", "qtspeech", "qtmultimedia", "kbookmarks"]
+29
View File
@@ -0,0 +1,29 @@
# libxml2 2.13.9 — VARIANTE PIC + SHARED para la campaña KDE (ADR 0011, Capa 0). La canónica
# (recipes/libxml2.toml) es static-sin-PIC ⇒ libqalculate (y otros consumidores .so) fallan al linkearla
# ("R_X86_64_PC32 ... xmlFree ... recompile with -fPIC"). Aquí --enable-shared (libxml2.so) + PIC. Override
# incoming-kde (mismo name). compiler=gcc (zig miscompila). Sin python/lzma; CON zlib no (mantener mínimo).
name = "libxml2"
version = "2.13.9"
[source]
tarball = "https://download.gnome.org/sources/libxml2/2.13/libxml2-2.13.9.tar.xz"
sha256 = "a2c9ae7b770da34860050c309f903221c67830c86e4a7e760692b803df95143a"
patches = ["CVE-2026-6732.patch", "CVE-2026-6732-test.patch"]
[build]
compiler = "gcc"
target = "x86_64-linux-musl"
link = "dynamic"
flags = []
[build.phases]
configure = '''
./configure \
--build=$CBUILD --host=$CHOST \
--prefix=/usr \
--enable-shared --disable-static --with-pic \
--without-python --without-lzma --without-zlib \
--with-legacy
'''
compile = 'make'
install = "make DESTDIR=/out install && find /out -name '*.la' -delete"