Fix IndexOutOfBoundsException in MultiSelectionLayout when a new seletion starts past every selectable#3215
Open
Bitsy (bitsycore) wants to merge 1 commit into
Conversation
…ction starts past every selectable
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
MultiSelectionLayout.crossStatus assumed that when startSlot == endSlot, at least one of them was the non-dragging handle anchored ON a text, so both slots had to be odd and
slot / 2was a valid info indexThat assumpton fails when a fresh mouse-down starts a NEEW selection and the gesture position lands past every selectable in the SelectionContainer so the SelectionLayoutBuilder.updateSlot returns AFTER for every appended info, so both startSlot and endSlot stay UNASSIGNED_SLOT and get defaulted to
lastSlot = 2 * infoList.sizeinside of build()Now both slots are equal and even,
startSlot / 2 == infoList.sizeis out of bounds, and every accessor that reads infoList through slotToIndex throws IndexOutOfBoundsExceptionTesting
Reproduce with, on jvm desktop for ex with
Mouse-press in the empty area below "chunk 3", it would throws
IndexOutOfBoundsException: Index 3 out of bounds for length 3at MultiSelectionLayout.getCrossStatus(SelectionLayout.kt:184).