| From f7ca0035d17a663f55668e662b840afce7b86112 Mon Sep 17 00:00:00 2001 |
| From: Christian Voegl <cvoegl@suse.com> |
| Date: Wed, 27 Oct 2021 11:25:18 +0200 |
| Subject: [PATCH] In stamp always advance the pointer if *p= 0xef |
| |
| The current implementation only advanced if 0xef is followed |
| by two non-zero bytes. In case of malformed input (0xef should be |
| the start byte of a three byte character) this leads to an infinite |
| loop. (CVE-2021-42260) |
| |
| [Retrieved (and backported) from: |
| https://sourceforge.net/p/tinyxml/git/merge-requests/1] |
| Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> |
| --- |
| tinyxmlparser.cpp | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| diff --git a/src/tinyxmlparser.cpp b/src/tinyxmlparser.cpp |
| index 81b7eae..8aa0dfa 100755 |
| --- a/src/tinyxmlparser.cpp |
| +++ b/src/tinyxmlparser.cpp |
| @@ -274,6 +274,12 @@ void TiXmlParsingData::Stamp( const char* now, TiXmlEncoding encoding ) |
| else |
| { p +=3; ++col; } // A normal character. |
| } |
| + else |
| + { |
| + // TIXML_UTF_LEAD_0 (239) is the start character of a 3 byte sequence, so |
| + // there is something wrong here. Just advance the pointer to evade infinite loops |
| + ++p; |
| + } |
| } |
| else |
| { |
| -- |
| 2.34.1 |
| |