commit:     8b880213b94234eba5e216a0742e37941d7446cc
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sat Feb 26 19:06:59 2022 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sat Feb 26 19:06:59 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8b880213

dev-libs/libwbxml: fix compatibility with newer expat

Bug: https://bugs.gentoo.org/833431
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../files/libwbxml-0.11.7-expat-compat-fixes.patch | 116 +++++++++++++++++++++
 dev-libs/libwbxml/libwbxml-0.11.7-r1.ebuild        |  37 +++++++
 2 files changed, 153 insertions(+)

diff --git a/dev-libs/libwbxml/files/libwbxml-0.11.7-expat-compat-fixes.patch 
b/dev-libs/libwbxml/files/libwbxml-0.11.7-expat-compat-fixes.patch
new file mode 100644
index 000000000000..00479c7f6437
--- /dev/null
+++ b/dev-libs/libwbxml/files/libwbxml-0.11.7-expat-compat-fixes.patch
@@ -0,0 +1,116 @@
+https://github.com/libwbxml/libwbxml/commit/4664d476fb5029073012b91880ce2a9bbc0b4725
+https://github.com/libwbxml/libwbxml/commit/4425e80f74b93a590b2c99638b9c5095e6a66244
+
+From: =?UTF-8?q?Sl=C3=A1vek=20Banko?= <[email protected]>
+Date: Thu, 24 Feb 2022 20:30:18 +0100
+Subject: [PATCH] Allow the use of a namespace separator specified by the
+ constant instead of hardcoded colon in the SyncML related code.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Slávek Banko <[email protected]>
+--- a/src/wbxml_internals.h
++++ b/src/wbxml_internals.h
+@@ -156,7 +156,9 @@ typedef enum WBXMLWVDataType_e {
+ #pragma warning(error: 4761) /**< integral size mismatch in argument : 
conversion supplied */
+ #endif /* WIN32 */
+ 
+-#define WBXML_NAMESPACE_SEPARATOR ':'
++/* Separator must be the same in both cases - once as a char, once as a 
string */
++#define WBXML_NAMESPACE_SEPARATOR     ':'
++#define WBXML_NAMESPACE_SEPARATOR_STR ":"
+ 
+ /** @} */
+ 
+--- a/src/wbxml_tree_clb_xml.c
++++ b/src/wbxml_tree_clb_xml.c
+@@ -33,6 +33,7 @@
+  * @brief WBXML Tree Callbacks for XML Parser (Expat)
+  */
+ 
++#include "wbxml_internals.h"
+ #include "wbxml_config_internals.h"
+ 
+ #if defined( HAVE_EXPAT )
+@@ -160,8 +161,8 @@ void wbxml_tree_clb_xml_start_element(void           *ctx,
+      * potentially embedded documents.
+      */
+     if ((
+-         (WBXML_STRCMP(localName, "syncml:devinf:DevInf") == 0) ||
+-         (WBXML_STRCMP(localName, "syncml:dmddf1.2:MgmtTree") == 0)
++         (WBXML_STRCMP(localName, "syncml:devinf" 
WBXML_NAMESPACE_SEPARATOR_STR "DevInf") == 0) ||
++         (WBXML_STRCMP(localName, "syncml:dmddf1.2" 
WBXML_NAMESPACE_SEPARATOR_STR "MgmtTree") == 0)
+         )&&
+         (tree_ctx->current != NULL))
+     {
+@@ -255,8 +256,8 @@ void wbxml_tree_clb_xml_end_element(void           *ctx,
+             /* End of skipped node */
+ 
+ #if defined( WBXML_SUPPORT_SYNCML )
+-            if (WBXML_STRCMP(localName, "syncml:devinf:DevInf") == 0 ||
+-              WBXML_STRCMP(localName, "syncml:dmddf1.2:MgmtTree") == 0) {
++            if (WBXML_STRCMP(localName, "syncml:devinf" 
WBXML_NAMESPACE_SEPARATOR_STR "DevInf") == 0 ||
++              WBXML_STRCMP(localName, "syncml:dmddf1.2" 
WBXML_NAMESPACE_SEPARATOR_STR "MgmtTree") == 0) {
+               /* definitions first ... or some compilers don't like it */
+                 WBXMLBuffer *embed_doc = NULL;
+                 WBXMLTree *tree = NULL;
+@@ -277,10 +278,10 @@ void wbxml_tree_clb_xml_end_element(void           *ctx,
+                 }
+ 
+                 /* Check Buffer Creation and add the closing tag */
+-              if ((WBXML_STRCMP(localName, "syncml:devinf:DevInf") == 0 &&
++              if ((WBXML_STRCMP(localName, "syncml:devinf" 
WBXML_NAMESPACE_SEPARATOR_STR "DevInf") == 0 &&
+                    (!wbxml_buffer_append_cstr(embed_doc, "</DevInf>")))
+                     ||
+-                  (WBXML_STRCMP(localName, "syncml:dmddf1.2:MgmtTree") == 0 &&
++                  (WBXML_STRCMP(localName, "syncml:dmddf1.2" 
WBXML_NAMESPACE_SEPARATOR_STR "MgmtTree") == 0 &&
+                    (!wbxml_buffer_append_cstr(embed_doc, "</MgmtTree>"))))
+                 {
+                     tree_ctx->error = WBXML_ERROR_NOT_ENOUGH_MEMORY;
+@@ -289,7 +290,7 @@ void wbxml_tree_clb_xml_end_element(void           *ctx,
+                 }
+ 
+                 /* Add doctype to give the XML parser a chance */
+-              if (WBXML_STRCMP(localName, "syncml:dmddf1.2:MgmtTree") == 0 &&
++              if (WBXML_STRCMP(localName, "syncml:dmddf1.2" 
WBXML_NAMESPACE_SEPARATOR_STR "MgmtTree") == 0 &&
+                   tree_ctx->tree->lang->langID != WBXML_LANG_SYNCML_SYNCML12)
+               {
+                     tree_ctx->error = WBXML_ERROR_UNKNOWN_XML_LANGUAGE;
+@@ -305,7 +306,7 @@ void wbxml_tree_clb_xml_end_element(void           *ctx,
+                               lang = 
wbxml_tables_get_table(WBXML_LANG_SYNCML_DEVINF11);
+                               break;
+                       case WBXML_LANG_SYNCML_SYNCML12:
+-                              if (WBXML_STRCMP(localName, 
"syncml:dmddf1.2:MgmtTree") == 0) {
++                              if (WBXML_STRCMP(localName, "syncml:dmddf1.2" 
WBXML_NAMESPACE_SEPARATOR_STR "MgmtTree") == 0) {
+                                       lang = 
wbxml_tables_get_table(WBXML_LANG_SYNCML_DMDDF12);
+                               } else {
+                                       lang = 
wbxml_tables_get_table(WBXML_LANG_SYNCML_DEVINF12);
+
+From: =?UTF-8?q?Sl=C3=A1vek=20Banko?= <[email protected]>
+Date: Thu, 24 Feb 2022 20:31:15 +0100
+Subject: [PATCH] Change the default internal namespace separator from the
+ colon to the pipe.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This solves compatibility with libexpat >= 2.4.5
+after fix the security problem CVE-2022-25236.
+
+This resolves issue #76.
+
+Signed-off-by: Slávek Banko <[email protected]>
+--- a/src/wbxml_internals.h
++++ b/src/wbxml_internals.h
+@@ -157,8 +157,8 @@ typedef enum WBXMLWVDataType_e {
+ #endif /* WIN32 */
+ 
+ /* Separator must be the same in both cases - once as a char, once as a 
string */
+-#define WBXML_NAMESPACE_SEPARATOR     ':'
+-#define WBXML_NAMESPACE_SEPARATOR_STR ":"
++#define WBXML_NAMESPACE_SEPARATOR     '|'
++#define WBXML_NAMESPACE_SEPARATOR_STR "|"
+ 
+ /** @} */
+ 

diff --git a/dev-libs/libwbxml/libwbxml-0.11.7-r1.ebuild 
b/dev-libs/libwbxml/libwbxml-0.11.7-r1.ebuild
new file mode 100644
index 000000000000..d351e183714d
--- /dev/null
+++ b/dev-libs/libwbxml/libwbxml-0.11.7-r1.ebuild
@@ -0,0 +1,37 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit cmake
+
+DESCRIPTION="Library and tools to parse, encode and handle WBXML documents"
+HOMEPAGE="https://github.com/libwbxml/libwbxml";
+SRC_URI="https://github.com/${PN}/${PN}/archive/${P}.tar.gz";
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~x86"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="dev-libs/expat
+       virtual/libiconv"
+DEPEND="${RDEPEND}
+       test? ( dev-libs/check )"
+
+DOCS=( BUGS ChangeLog README References THANKS TODO )
+S=${WORKDIR}/${PN}-${P}
+
+PATCHES=(
+       "${FILESDIR}"/${P}-expat-compat-fixes.patch
+)
+
+src_configure() {
+       local mycmakeargs=(
+               -DENABLE_INSTALL_DOC=OFF
+               -DENABLE_UNIT_TEST=$(usex test)
+       )
+
+       cmake_src_configure
+}

Reply via email to