From 7547de9f5298a4fb710c1a44069e10dbc982c2e0 Mon Sep 17 00:00:00 2001 From: Leland Lucius Date: Fri, 12 Feb 2021 10:32:43 -0600 Subject: [PATCH] Bug 1398 - Metadata Editor tag fields emptied when field length stored in project exceeds a given length --- src/Tags.cpp | 2 +- src/xml/XMLTagHandler.cpp | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) 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. }