diff options
| -rw-r--r-- | meta/recipes-support/libxslt/files/gnome-libxslt-bug-139-apple-fix.diff | 103 | ||||
| -rw-r--r-- | meta/recipes-support/libxslt/libxslt_1.1.43.bb | 3 |
2 files changed, 105 insertions, 1 deletions
diff --git a/meta/recipes-support/libxslt/files/gnome-libxslt-bug-139-apple-fix.diff b/meta/recipes-support/libxslt/files/gnome-libxslt-bug-139-apple-fix.diff new file mode 100644 index 0000000000..c7220ab954 --- /dev/null +++ b/meta/recipes-support/libxslt/files/gnome-libxslt-bug-139-apple-fix.diff | |||
| @@ -0,0 +1,103 @@ | |||
| 1 | From 345d6826d0eae6f0a962456b8ed6f6a1bad0877d Mon Sep 17 00:00:00 2001 | ||
| 2 | From: David Kilzer <ddkilzer@apple.com> | ||
| 3 | Date: Sat, 24 May 2025 15:06:42 -0700 | ||
| 4 | Subject: [PATCH] libxslt: Type confusion in xmlNode.psvi between stylesheet | ||
| 5 | and source nodes | ||
| 6 | |||
| 7 | * libxslt/functions.c: | ||
| 8 | (xsltDocumentFunctionLoadDocument): | ||
| 9 | - Implement fix suggested by Ivan Fratric. This copies the xmlDoc, | ||
| 10 | calls xsltCleanupSourceDoc() to remove pvsi fields, then adds the | ||
| 11 | xmlDoc to tctxt->docList. | ||
| 12 | - Add error handling for functions that may return NULL. | ||
| 13 | * libxslt/transform.c: | ||
| 14 | - Remove static keyword so this can be called from | ||
| 15 | xsltDocumentFunctionLoadDocument(). | ||
| 16 | * libxslt/transformInternals.h: Add. | ||
| 17 | (xsltCleanupSourceDoc): Add declaration. | ||
| 18 | |||
| 19 | Fixes #139. | ||
| 20 | |||
| 21 | CVE: CVE-2025-7424 | ||
| 22 | Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/libxslt/-/issues/139] | ||
| 23 | Signed-off-by: Ross Burton <ross.burton@arm.com> | ||
| 24 | --- | ||
| 25 | libxslt/functions.c | 16 +++++++++++++++- | ||
| 26 | libxslt/transform.c | 3 ++- | ||
| 27 | libxslt/transformInternals.h | 9 +++++++++ | ||
| 28 | 3 files changed, 26 insertions(+), 2 deletions(-) | ||
| 29 | create mode 100644 libxslt/transformInternals.h | ||
| 30 | |||
| 31 | diff --git a/libxslt/functions.c b/libxslt/functions.c | ||
| 32 | index 72a58dc4..11ec039f 100644 | ||
| 33 | --- a/libxslt/functions.c | ||
| 34 | +++ b/libxslt/functions.c | ||
| 35 | @@ -34,6 +34,7 @@ | ||
| 36 | #include "numbersInternals.h" | ||
| 37 | #include "keys.h" | ||
| 38 | #include "documents.h" | ||
| 39 | +#include "transformInternals.h" | ||
| 40 | |||
| 41 | #ifdef WITH_XSLT_DEBUG | ||
| 42 | #define WITH_XSLT_DEBUG_FUNCTION | ||
| 43 | @@ -125,7 +126,20 @@ xsltDocumentFunctionLoadDocument(xmlXPathParserContextPtr ctxt, | ||
| 44 | /* | ||
| 45 | * This selects the stylesheet's doc itself. | ||
| 46 | */ | ||
| 47 | - doc = tctxt->style->doc; | ||
| 48 | + doc = xmlCopyDoc(tctxt->style->doc, 1); | ||
| 49 | + if (doc == NULL) { | ||
| 50 | + xsltTransformError(tctxt, NULL, NULL, | ||
| 51 | + "document() : failed to copy style doc\n"); | ||
| 52 | + goto out_fragment; | ||
| 53 | + } | ||
| 54 | + xsltCleanupSourceDoc(doc); /* Remove psvi fields. */ | ||
| 55 | + idoc = xsltNewDocument(tctxt, doc); | ||
| 56 | + if (idoc == NULL) { | ||
| 57 | + xsltTransformError(tctxt, NULL, NULL, | ||
| 58 | + "document() : failed to create xsltDocument\n"); | ||
| 59 | + xmlFreeDoc(doc); | ||
| 60 | + goto out_fragment; | ||
| 61 | + } | ||
| 62 | } else { | ||
| 63 | goto out_fragment; | ||
| 64 | } | ||
| 65 | diff --git a/libxslt/transform.c b/libxslt/transform.c | ||
| 66 | index 54ef821b..38c2dce6 100644 | ||
| 67 | --- a/libxslt/transform.c | ||
| 68 | +++ b/libxslt/transform.c | ||
| 69 | @@ -43,6 +43,7 @@ | ||
| 70 | #include "xsltlocale.h" | ||
| 71 | #include "pattern.h" | ||
| 72 | #include "transform.h" | ||
| 73 | +#include "transformInternals.h" | ||
| 74 | #include "variables.h" | ||
| 75 | #include "numbersInternals.h" | ||
| 76 | #include "namespaces.h" | ||
| 77 | @@ -5757,7 +5758,7 @@ xsltCountKeys(xsltTransformContextPtr ctxt) | ||
| 78 | * | ||
| 79 | * Resets source node flags and ids stored in 'psvi' member. | ||
| 80 | */ | ||
| 81 | -static void | ||
| 82 | +void | ||
| 83 | xsltCleanupSourceDoc(xmlDocPtr doc) { | ||
| 84 | xmlNodePtr cur = (xmlNodePtr) doc; | ||
| 85 | void **psviPtr; | ||
| 86 | diff --git a/libxslt/transformInternals.h b/libxslt/transformInternals.h | ||
| 87 | new file mode 100644 | ||
| 88 | index 00000000..d0f42823 | ||
| 89 | --- /dev/null | ||
| 90 | +++ b/libxslt/transformInternals.h | ||
| 91 | @@ -0,0 +1,9 @@ | ||
| 92 | +/* | ||
| 93 | + * Summary: set of internal interfaces for the XSLT engine transformation part. | ||
| 94 | + * | ||
| 95 | + * Copy: See Copyright for the status of this software. | ||
| 96 | + * | ||
| 97 | + * Author: David Kilzer <ddkilzer@apple.com> | ||
| 98 | + */ | ||
| 99 | + | ||
| 100 | +void xsltCleanupSourceDoc(xmlDocPtr doc); | ||
| 101 | -- | ||
| 102 | 2.39.5 (Apple Git-154) | ||
| 103 | |||
diff --git a/meta/recipes-support/libxslt/libxslt_1.1.43.bb b/meta/recipes-support/libxslt/libxslt_1.1.43.bb index d251fa8122..e08e92085d 100644 --- a/meta/recipes-support/libxslt/libxslt_1.1.43.bb +++ b/meta/recipes-support/libxslt/libxslt_1.1.43.bb | |||
| @@ -13,7 +13,8 @@ LIC_FILES_CHKSUM = "file://Copyright;md5=0cd9a07afbeb24026c9b03aecfeba458" | |||
| 13 | SECTION = "libs" | 13 | SECTION = "libs" |
| 14 | DEPENDS = "libxml2" | 14 | DEPENDS = "libxml2" |
| 15 | 15 | ||
| 16 | SRC_URI = "https://download.gnome.org/sources/libxslt/1.1/libxslt-${PV}.tar.xz" | 16 | SRC_URI = "https://download.gnome.org/sources/libxslt/1.1/libxslt-${PV}.tar.xz \ |
| 17 | file://gnome-libxslt-bug-139-apple-fix.diff" | ||
| 17 | 18 | ||
| 18 | SRC_URI[sha256sum] = "5a3d6b383ca5afc235b171118e90f5ff6aa27e9fea3303065231a6d403f0183a" | 19 | SRC_URI[sha256sum] = "5a3d6b383ca5afc235b171118e90f5ff6aa27e9fea3303065231a6d403f0183a" |
| 19 | 20 | ||
