From 2148394afb01f13b0b12d7c867fa9910c4745cb8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Sun, 15 Jan 2012 17:45:14 +0000 Subject: [PATCH] Don't crash if XRC file contains '_' at the end of a string. Parsing code for translating between '_' and '&' didn't properly handle the case when the input was malformed and '_' wasn't followed by either another '_' or another character. Added a check to guard against this. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70357 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/xrc/xmlres.cpp | 2 +- utils/wxrc/wxrc.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/xrc/xmlres.cpp b/src/xrc/xmlres.cpp index 0afbbcb588..55ae02d4d3 100644 --- a/src/xrc/xmlres.cpp +++ b/src/xrc/xmlres.cpp @@ -1554,7 +1554,7 @@ wxString wxXmlResourceHandler::GetText(const wxString& param, bool translate) // like "&File..." -- this is illegal in XML, so we use "_File..."): if ( *dt == amp_char ) { - if ( *(++dt) == amp_char ) + if ( dt+1 == str1.end() || *(++dt) == amp_char ) str2 << amp_char; else str2 << wxT('&') << *dt; diff --git a/utils/wxrc/wxrc.cpp b/utils/wxrc/wxrc.cpp index 9e580866c3..1998c76687 100644 --- a/utils/wxrc/wxrc.cpp +++ b/utils/wxrc/wxrc.cpp @@ -896,7 +896,9 @@ static wxString ConvertText(const wxString& str) { if (*dt == wxT('_')) { - if ( *(++dt) == wxT('_') ) + if ( *(dt+1) == 0 ) + str2 << wxT('_'); + else if ( *(++dt) == wxT('_') ) str2 << wxT('_'); else str2 << wxT('&') << *dt; -- 2.49.0