Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Loskutov2021-06-15 18:47:49 +0000
committerAndrey Loskutov2021-06-15 19:09:59 +0000
commit1464659a2ead0e81900777d78e77392a2c5afa88 (patch)
tree89230b1f9e680d6f956885be3eed9a10146b3852
parent949fe057b366333e1c0a8b4766c9fc0c44fb1769 (diff)
downloadeclipse.platform.text-1464659a2ead0e81900777d78e77392a2c5afa88.tar.gz
eclipse.platform.text-1464659a2ead0e81900777d78e77392a2c5afa88.tar.xz
eclipse.platform.text-1464659a2ead0e81900777d78e77392a2c5afa88.zip
Bug 574216 - IOOBE in CompletionProposalPopup.selectProposalI20210615-1800
Guard from direct access on ever changing fFilteredProposals refrence and check for index inside fFilteredProposals bounds. Change-Id: I1946c255b54c87724624d5a29cf9b44fc3911b7d Signed-off-by: Andrey Loskutov <loskutov@gmx.de> Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.text/+/182010 Tested-by: Platform Bot <platform-bot@eclipse.org>
-rw-r--r--org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/CompletionProposalPopup.java25
1 files changed, 15 insertions, 10 deletions
diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/CompletionProposalPopup.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/CompletionProposalPopup.java
index 3e345ce3ea7..4c27e4c4eae 100644
--- a/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/CompletionProposalPopup.java
+++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/CompletionProposalPopup.java
@@ -862,8 +862,9 @@ class CompletionProposalPopup implements IContentAssistListener {
TableItem item= (TableItem) event.item;
int index= fProposalTable.indexOf(item);
- if (0 <= index && index < fFilteredProposals.size()) {
- ICompletionProposal current= fFilteredProposals.get(index);
+ List<ICompletionProposal> proposals= fFilteredProposals;
+ if (0 <= index && index < proposals.size()) {
+ ICompletionProposal current= proposals.get(index);
String displayString;
StyleRange[] styleRanges= null;
@@ -930,9 +931,11 @@ class CompletionProposalPopup implements IContentAssistListener {
return null;
int i= fProposalTable.getSelectionIndex();
- if (fFilteredProposals == null || i < 0 || i >= fFilteredProposals.size())
+ List<ICompletionProposal> proposals= fFilteredProposals;
+ if (proposals == null || i < 0 || i >= proposals.size()) {
return null;
- return fFilteredProposals.get(i);
+ }
+ return proposals.get(i);
}
/**
@@ -1411,12 +1414,13 @@ class CompletionProposalPopup implements IContentAssistListener {
if (oldProposal instanceof ICompletionProposalExtension2 && fViewer != null)
((ICompletionProposalExtension2) oldProposal).unselected(fViewer);
- if (fFilteredProposals == null) {
+ List<ICompletionProposal> proposals= fFilteredProposals;
+ if (proposals == null || index >= proposals.size()) {
fireSelectionEvent(null, smartToggle);
return;
}
- ICompletionProposal proposal= fFilteredProposals.get(index);
+ ICompletionProposal proposal= proposals.get(index);
if (proposal instanceof ICompletionProposalExtension2 && fViewer != null)
((ICompletionProposalExtension2) proposal).selected(fViewer, smartToggle);
@@ -1624,19 +1628,20 @@ class CompletionProposalPopup implements IContentAssistListener {
fLastCompletionOffset= fFilterOffset;
fFilteredProposals= computeProposals(fInvocationOffset);
- int count= (fFilteredProposals == null ? 0 : fFilteredProposals.size());
+ List<ICompletionProposal> proposals= fFilteredProposals;
+ int count= (proposals == null ? 0 : proposals.size());
if (count == 0 && hideWhenNoProposals(false))
return;
- if (count == 1 && canAutoInsert(fFilteredProposals.get(0))) {
- insertProposal(fFilteredProposals.get(0), (char) 0, 0, fInvocationOffset);
+ if (count == 1 && canAutoInsert(proposals.get(0))) {
+ insertProposal(proposals.get(0), (char) 0, 0, fInvocationOffset);
hide();
} else {
ensureDocumentListenerInstalled();
if (count > 0 && completeCommonPrefix())
hide();
else {
- fComputedProposals= fFilteredProposals;
+ fComputedProposals= proposals;
createProposalSelector();
setProposals(fComputedProposals, false);
displayProposals();

Back to the top