Fix use of uninitialized variables in GetWordAtPosition when the position is not in a word

Originally committed to SVN as r6271.
This commit is contained in:
Thomas Goyne 2012-01-11 19:18:54 +00:00
parent 1293f86afe
commit 3f8b9b8213
2 changed files with 11 additions and 9 deletions

View file

@ -86,26 +86,28 @@ void ScintillaTextCtrl::SetUnicodeStyling(int start,int length,int style) {
/// @brief Get boundaries of word at position /// @brief Get boundaries of word at position
void ScintillaTextCtrl::GetBoundsOfWordAtPosition(int pos,int &start,int &end) { void ScintillaTextCtrl::GetBoundsOfWordAtPosition(int pos,int &start,int &end) {
// Results
IntPairVector results; IntPairVector results;
GetWordBoundaries(GetText(), results); GetWordBoundaries(GetText(), results);
// Get boundaries // Get boundaries
int count = results.size(); for (size_t i = 0; i < results.size(); i++) {
for (int i = 0; i < count; i++) {
if (results[i].first <= pos && results[i].second >= pos) { if (results[i].first <= pos && results[i].second >= pos) {
start = results[i].first; start = results[i].first;
end = results[i].second - 1; end = results[i].second;
return; return;
} }
} }
// Word not found
start = 0;
end = 0;
} }
/// @brief Get word at specified position /// @brief Get word at specified position
wxString ScintillaTextCtrl::GetWordAtPosition(int pos) { wxString ScintillaTextCtrl::GetWordAtPosition(int pos) {
int start,end; int start,end;
GetBoundsOfWordAtPosition(pos, start, end); GetBoundsOfWordAtPosition(pos, start, end);
return GetText().Mid(start, end - start + 1); return GetText().Mid(start, end - start);
} }
/// @brief Set selection, unicode-aware /// @brief Set selection, unicode-aware

View file

@ -873,7 +873,7 @@ void SubsTextEditCtrl::OnUseSuggestion(wxCommandEvent &event) {
GetBoundsOfWordAtPosition(currentWordPos, start, end); GetBoundsOfWordAtPosition(currentWordPos, start, end);
wxString text = GetText(); 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 // Set selection
SetSelectionU(start,start+suggestion.Length()); SetSelectionU(start,start+suggestion.Length());