From 3f8b9b8213eb01219cfac2c1dc460d97c3955e3e Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Wed, 11 Jan 2012 19:18:54 +0000 Subject: [PATCH] Fix use of uninitialized variables in GetWordAtPosition when the position is not in a word Originally committed to SVN as r6271. --- aegisub/src/scintilla_text_ctrl.cpp | 14 ++++++++------ aegisub/src/subs_edit_ctrl.cpp | 6 +++--- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/aegisub/src/scintilla_text_ctrl.cpp b/aegisub/src/scintilla_text_ctrl.cpp index f147ff1b8..983fbfed0 100644 --- a/aegisub/src/scintilla_text_ctrl.cpp +++ b/aegisub/src/scintilla_text_ctrl.cpp @@ -86,26 +86,28 @@ void ScintillaTextCtrl::SetUnicodeStyling(int start,int length,int style) { /// @brief Get boundaries of word at position void ScintillaTextCtrl::GetBoundsOfWordAtPosition(int pos,int &start,int &end) { - // Results IntPairVector results; GetWordBoundaries(GetText(), results); // Get boundaries - int count = results.size(); - for (int i = 0; i < count; i++) { + for (size_t i = 0; i < results.size(); i++) { if (results[i].first <= pos && results[i].second >= pos) { start = results[i].first; - end = results[i].second - 1; + end = results[i].second; return; } } + + // Word not found + start = 0; + end = 0; } /// @brief Get word at specified position wxString ScintillaTextCtrl::GetWordAtPosition(int pos) { int start,end; - GetBoundsOfWordAtPosition(pos,start,end); - return GetText().Mid(start, end - start + 1); + GetBoundsOfWordAtPosition(pos, start, end); + return GetText().Mid(start, end - start); } /// @brief Set selection, unicode-aware diff --git a/aegisub/src/subs_edit_ctrl.cpp b/aegisub/src/subs_edit_ctrl.cpp index 82534751e..969b08328 100644 --- a/aegisub/src/subs_edit_ctrl.cpp +++ b/aegisub/src/subs_edit_ctrl.cpp @@ -869,11 +869,11 @@ void SubsTextEditCtrl::OnUseSuggestion(wxCommandEvent &event) { } // Get boundaries of text being replaced - int start,end; - GetBoundsOfWordAtPosition(currentWordPos,start,end); + int start, end; + GetBoundsOfWordAtPosition(currentWordPos, start, end); wxString text = GetText(); - SetText(text.Left(std::max(0,start)) + suggestion + text.Mid(end+1)); + SetText(text.Left(std::max(0, start)) + suggestion + text.Mid(end)); // Set selection SetSelectionU(start,start+suggestion.Length());