Skip to content

Conversation

@reventlov
Copy link
Contributor

The iterator constructor used array[index] to initialize an internal cached view (necessary so that operator-> can return a pointer), which caused pointer arithmetic overflow when index was -1 -- as in the case of rend().

This change uses a checked array.at(index) method to get a null view when index is out of bounds.

I considered changing array[index] to return a null view for out-of-bounds indexes, but user code may be inadvertently relying on that behavior, so I am leaving it out of this bug fix.

The iterator constructor used `array[index]` to initialize an internal
cached view (necessary so that `operator->` can return a pointer), which
caused pointer arithmetic overflow when `index` was -1 -- as in the case
of `rend()`.

This change uses a checked `array.at(index)` method to get a null view
when `index` is out of bounds.

I considered changing `array[index]` to return a null view for
out-of-bounds indexes, but user code may be inadvertently relying on
that behavior, so I am leaving it out of this bug fix.
@reventlov reventlov requested a review from EricRahm January 30, 2025 21:05
Copy link
Collaborator

@EricRahm EricRahm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm!

@reventlov reventlov merged commit 5901d12 into google:master Feb 3, 2025
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants