# Fix incorrect mask in BufferChunks::next \(\#57544\) · gitcafe/zed

[View on GitCafe](https://git.cafe/gitcafe/zed/commit/18c98b021168dee458a4721d44b3618f5f2d1adb)

Repository: [gitcafe/zed](https://git.cafe/gitcafe/zed)

Visibility: public

Requested revision: 18c98b021168dee458a4721d44b3618f5f2d1adb

Requested commit: 18c98b021168dee458a4721d44b3618f5f2d1adb

Commit: 18c98b021168dee458a4721d44b3618f5f2d1adb

Tree: e83ec4ed157aad990db34a58b543199cc77f6514

Author: Galen Elias

Committer: GitHub

## Message

````
Fix incorrect mask in BufferChunks::next (#57544)

I noticed while working on a personal project which derives some logic
from the core Zed stack that I was getting very unexpected results out
of BufferChunks::next when walking through formatted chunks.

The code calculates the mask for the `tabs`, `chars`, and `newlines`
masks incorrectly, making the mask far too large when we are extracting
chunks when chunk_start != 0.

I believe the reason that this isn't a problem in Zed is that the
InlayMap ends up re-masks all the bitmasks before passing things up the
stack, so covers up the problem, preventing it from causing any damage.
It appears this isn't caught in tests because this only happens when
extracting chunks with formatting, during which we offset our retrieval
by next_capture_start, and the current chunks tests don't use
formatting.

I think the fix is sound. The test is maybe not super ideal, but I
wanted to demonstrate the issue in the pull request.

If we process the following text by chunks:
```rust
use std::cmp::Eq;
```

The first chunk is 'use ' with the chars mask being 0b1111. The second
chunk is 'std' with the chars mask being 0b1111111 when it should just
be 0b111.

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:
 - N/A

Co-authored-by: Lukas Wirth <lukas@zed.dev>
````

## Parents

- [838fea165ceb2d940bc7451ca930b9844156f209](https://git.cafe/gitcafe/zed/commit/838fea165ceb2d940bc7451ca930b9844156f209?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zed/tree/18c98b021168dee458a4721d44b3618f5f2d1adb?format=markdown)
