diff options
author | Andrey Loskutov | 2021-06-15 18:47:49 +0000 |
---|---|---|
committer | Andrey Loskutov | 2021-06-15 19:09:59 +0000 |
commit | 1464659a2ead0e81900777d78e77392a2c5afa88 (patch) | |
tree | 89230b1f9e680d6f956885be3eed9a10146b3852 | |
parent | 949fe057b366333e1c0a8b4766c9fc0c44fb1769 (diff) | |
download | eclipse.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.java | 25 |
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(); |