From 25b79662ea0d3757e079e5a8a44d8905c068af17 Mon Sep 17 00:00:00 2001 From: jolavillette Date: Tue, 12 May 2026 10:16:36 +0200 Subject: [PATCH 1/3] Fix FeedReader text truncation on Windows MSYS2 by forcing UTF-8 and improving XML extraction --- plugins/FeedReader/util/HTMLWrapper.cpp | 2 +- plugins/FeedReader/util/XMLWrapper.cpp | 48 ++++++------------------- 2 files changed, 12 insertions(+), 38 deletions(-) diff --git a/plugins/FeedReader/util/HTMLWrapper.cpp b/plugins/FeedReader/util/HTMLWrapper.cpp index f7c421506..0f51ec619 100644 --- a/plugins/FeedReader/util/HTMLWrapper.cpp +++ b/plugins/FeedReader/util/HTMLWrapper.cpp @@ -32,7 +32,7 @@ bool HTMLWrapper::readHTML(const char *html, const char *url) cleanup(); handleError(true, mLastErrorString); - mDocument = htmlReadMemory(html, strlen(html), url, "", /*HTML_PARSE_NOERROR | HTML_PARSE_NOWARNING | */HTML_PARSE_COMPACT | HTML_PARSE_NONET | HTML_PARSE_NOBLANKS); + mDocument = htmlReadMemory(html, strlen(html), url, "UTF-8", /*HTML_PARSE_NOERROR | HTML_PARSE_NOWARNING | */HTML_PARSE_COMPACT | HTML_PARSE_NONET | HTML_PARSE_NOBLANKS); handleError(false, mLastErrorString); if (mDocument) { diff --git a/plugins/FeedReader/util/XMLWrapper.cpp b/plugins/FeedReader/util/XMLWrapper.cpp index e0379cf73..5275a309b 100644 --- a/plugins/FeedReader/util/XMLWrapper.cpp +++ b/plugins/FeedReader/util/XMLWrapper.cpp @@ -124,42 +124,24 @@ void XMLWrapper::attach(xmlDocPtr document) bool XMLWrapper::convertToString(const xmlChar *xmlText, std::string &text) { - bool result = false; - - xmlBufferPtr in = xmlBufferCreateStatic((void*) xmlText, xmlStrlen(xmlText)); - xmlBufferPtr out = xmlBufferCreate(); - int ret = xmlCharEncOutFunc(mCharEncodingHandler, out, in); - if (ret >= 0) { - result = true; - text = (char*) xmlBufferContent(out); + if (!xmlText) { + text.clear(); + return false; } - xmlBufferFree(in); - xmlBufferFree(out); - - return result; + text = (const char*) xmlText; + return true; } bool XMLWrapper::convertFromString(const char *text, xmlChar *&xmlText) { - bool result = false; - - xmlBufferPtr in = xmlBufferCreateStatic((void*) text, strlen(text)); - xmlBufferPtr out = xmlBufferCreate(); - int ret = xmlCharEncInFunc(mCharEncodingHandler, out, in); - if (ret >= 0) { - result = true; -#if LIBXML_VERSION >= 20800 - xmlText = xmlBufferDetach(out); -#else - xmlText = xmlStrdup(xmlBufferContent(out)); -#endif + if (!text) { + xmlText = NULL; + return false; } - xmlBufferFree(in); - xmlBufferFree(out); - - return result; + xmlText = xmlStrdup(BAD_CAST text); + return xmlText != NULL; } xmlDocPtr XMLWrapper::getDocument() const @@ -345,15 +327,7 @@ bool XMLWrapper::getChildText(xmlNodePtr node, const char *childName, std::strin return nodeDump(div, text, true); } - if (child->children->type != XML_TEXT_NODE) { - return false; - } - - if (child->children->content) { - return convertToString(child->children->content, text); - } - - return true; + return getContent(child, text, false); } std::string XMLWrapper::getAttr(xmlNodePtr node, xmlAttrPtr attr) From 4be95c236e084859f846a35017fd8da72479e3d7 Mon Sep 17 00:00:00 2001 From: jolavillette Date: Mon, 25 May 2026 07:10:56 +0200 Subject: [PATCH 2/3] FeedReader: keep XML_TEXT_NODE test to prevent undefined behavior in getContent() --- plugins/FeedReader/util/XMLWrapper.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/FeedReader/util/XMLWrapper.cpp b/plugins/FeedReader/util/XMLWrapper.cpp index 5275a309b..2ae1afcd3 100644 --- a/plugins/FeedReader/util/XMLWrapper.cpp +++ b/plugins/FeedReader/util/XMLWrapper.cpp @@ -327,6 +327,10 @@ bool XMLWrapper::getChildText(xmlNodePtr node, const char *childName, std::strin return nodeDump(div, text, true); } + if (child->children->type != XML_TEXT_NODE) { + return false; + } + return getContent(child, text, false); } From d59ce80ed08a9ce807374d89a6c3ad718967ac1f Mon Sep 17 00:00:00 2001 From: jolavillette Date: Mon, 25 May 2026 11:08:06 +0200 Subject: [PATCH 3/3] Revert "FeedReader: keep XML_TEXT_NODE test to prevent undefined behavior in getContent()" This reverts commit 4be95c236e084859f846a35017fd8da72479e3d7. --- plugins/FeedReader/util/XMLWrapper.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/plugins/FeedReader/util/XMLWrapper.cpp b/plugins/FeedReader/util/XMLWrapper.cpp index 2ae1afcd3..5275a309b 100644 --- a/plugins/FeedReader/util/XMLWrapper.cpp +++ b/plugins/FeedReader/util/XMLWrapper.cpp @@ -327,10 +327,6 @@ bool XMLWrapper::getChildText(xmlNodePtr node, const char *childName, std::strin return nodeDump(div, text, true); } - if (child->children->type != XML_TEXT_NODE) { - return false; - } - return getContent(child, text, false); }