diff --git a/src/Tags.cpp b/src/Tags.cpp index c98c92e0c..1437f920b 100644 --- a/src/Tags.cpp +++ b/src/Tags.cpp @@ -558,7 +558,7 @@ bool Tags::HandleXMLTag(const wxChar *tag, const wxChar **attrs) wxString value = *attrs++; if (!XMLValueChecker::IsGoodString(attr) || - !XMLValueChecker::IsGoodString(value)) { + !XMLValueChecker::IsGoodLongString(value)) { break; } diff --git a/src/xml/XMLTagHandler.cpp b/src/xml/XMLTagHandler.cpp index 19f7fa1bc..995808e0d 100644 --- a/src/xml/XMLTagHandler.cpp +++ b/src/xml/XMLTagHandler.cpp @@ -36,19 +36,20 @@ // Length check. Is in part about not supplying malicious strings to file functions. bool XMLValueChecker::IsGoodString(const wxString & str) { - size_t len = str.length(); - int nullIndex = str.Find('\0', false); - if ((len <= PLATFORM_MAX_PATH) && // Shouldn't be any reason for longer strings, except intentional file corruption. - (nullIndex == -1)) // No null characters except terminator. + // Originally based on MAX_PATH, which is way too limiting and just wrong since + // the length check is for a plain string and not a filename + if (IsGoodLongString(str) && str.length() <= 4096) // Shouldn't be any reason for longer strings, except intentional file corruption. + { return true; - else - return false; // good place for a breakpoint + } + + return false; } // No length check, as e.g. labels could be very long. bool XMLValueChecker::IsGoodLongString(const wxString & str) { - return str.Find('\0', false) == -1; // No null characters except terminator. + return str.Find('\0', false) == wxNOT_FOUND; // No null characters except terminator. }