Skip to content

editor: Fix panics that could occur when content mask had negative bounds#47327

Merged
Anthony-Eid merged 3 commits intomainfrom
fix-editor-panics
Jan 23, 2026
Merged

editor: Fix panics that could occur when content mask had negative bounds#47327
Anthony-Eid merged 3 commits intomainfrom
fix-editor-panics

Conversation

@Anthony-Eid
Copy link
Contributor

@Anthony-Eid Anthony-Eid commented Jan 21, 2026

This panic happened because the editor was using window.content_mask to get the visible bounds, which had a negative value for its height in some cases.
Closes #47157

This happened for three reasons:

  1. Bounds::from_corners returns a negative size if callers pass in corners where bottom_right < top_left. I originally wanted to add error checking to this function but didn't, because it might be better to move the error checking higher up. For now I'm going to push a fix and figure out a better solution later

  2. Bounds::intersect could return negative-sized bounds when the two bounds didn't overlap, instead of returning a zero sized bounds.

  3. Style::paint sometimes passed invalid corner values to Bounds::from_corners (where the computed bottom-right was above/left of the top-left).

Release Notes:

  • editor: Fix a crash that could happen when editor visible line height is zero

This panic happened because the editor was using `window.content_mask`
to get the visible bounds, which had a negative value for its height in
some cases.

This happened for three reasons:

1. `Bounds::from_corners` returns a negative size if callers pass in
   corners where `bottom_right < top_left`. I originally wanted to add
   error checking to this function but didn't, because I wasn't sure if
   negative size is used on purpose somewhere else.

2. `Bounds::intersect` could return negative-sized bounds when the two
   bounds didn't overlap, instead of returning a zero sized bounds.

3. `Style::paint` sometimes passed invalid corner values to
   `Bounds::from_corners` (where the computed bottom-right was
   above/left of the top-left).
@cla-bot cla-bot bot added the cla-signed The user has signed the Contributor License Agreement label Jan 21, 2026
@Anthony-Eid Anthony-Eid marked this pull request as ready for review January 23, 2026 17:14
@Anthony-Eid Anthony-Eid enabled auto-merge (squash) January 23, 2026 17:17
@Anthony-Eid Anthony-Eid disabled auto-merge January 23, 2026 17:26
@Anthony-Eid Anthony-Eid enabled auto-merge (squash) January 23, 2026 17:27
@Anthony-Eid Anthony-Eid merged commit 01d72aa into main Jan 23, 2026
30 checks passed
@Anthony-Eid Anthony-Eid deleted the fix-editor-panics branch January 23, 2026 17:30
@Anthony-Eid
Copy link
Contributor Author

/cherry-pick stable

@Anthony-Eid
Copy link
Contributor Author

/cherry-pick preview

github-actions bot pushed a commit that referenced this pull request Jan 23, 2026
…unds (#47327)

Closes #47157

This panic happened because the editor was using `window.content_mask`
to get the visible bounds, which had a negative value for its height in
some cases.

This happened for three reasons:

1. `Bounds::from_corners` returns a negative size if callers pass in
corners where `bottom_right < top_left`. I originally wanted to add
error checking to this function but didn't, because it might be better
to move the error checking higher up. For now I'm going to push a fix
and figure out a better solution later

2. `Bounds::intersect` could return negative-sized bounds when the two
bounds didn't overlap, instead of returning a zero sized bounds.

3. `Style::paint` sometimes passed invalid corner values to
`Bounds::from_corners` (where the computed bottom-right was above/left
of the top-left).

Release Notes:

- editor: Fix a crash that could happen when editor visible line height
is zero

---------

Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
github-actions bot pushed a commit that referenced this pull request Jan 23, 2026
…unds (#47327)

Closes #47157

This panic happened because the editor was using `window.content_mask`
to get the visible bounds, which had a negative value for its height in
some cases.

This happened for three reasons:

1. `Bounds::from_corners` returns a negative size if callers pass in
corners where `bottom_right < top_left`. I originally wanted to add
error checking to this function but didn't, because it might be better
to move the error checking higher up. For now I'm going to push a fix
and figure out a better solution later

2. `Bounds::intersect` could return negative-sized bounds when the two
bounds didn't overlap, instead of returning a zero sized bounds.

3. `Style::paint` sometimes passed invalid corner values to
`Bounds::from_corners` (where the computed bottom-right was above/left
of the top-left).

Release Notes:

- editor: Fix a crash that could happen when editor visible line height
is zero

---------

Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
zed-zippy bot added a commit that referenced this pull request Jan 23, 2026
…unds (#47327) (cherry-pick to preview) (#47502)

Cherry-pick of #47327 to preview

----
Closes #47157

This panic happened because the editor was using `window.content_mask`
to get the visible bounds, which had a negative value for its height in
some cases.

This happened for three reasons:

1. `Bounds::from_corners` returns a negative size if callers pass in
corners where `bottom_right < top_left`. I originally wanted to add
error checking to this function but didn't, because it might be better
to move the error checking higher up. For now I'm going to push a fix
and figure out a better solution later

2. `Bounds::intersect` could return negative-sized bounds when the two
bounds didn't overlap, instead of returning a zero sized bounds.

3. `Style::paint` sometimes passed invalid corner values to
`Bounds::from_corners` (where the computed bottom-right was above/left
of the top-left).

Release Notes:

- editor: Fix a crash that could happen when editor visible line height
is zero

---------

Co-authored-by: Zed Zippy
<234243425+zed-zippy[bot]@users.noreply.github.com>

Co-authored-by: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
zed-zippy bot added a commit that referenced this pull request Jan 23, 2026
…unds (#47327) (cherry-pick to stable) (#47501)

Cherry-pick of #47327 to stable

----
Closes #47157

This panic happened because the editor was using `window.content_mask`
to get the visible bounds, which had a negative value for its height in
some cases.

This happened for three reasons:

1. `Bounds::from_corners` returns a negative size if callers pass in
corners where `bottom_right < top_left`. I originally wanted to add
error checking to this function but didn't, because it might be better
to move the error checking higher up. For now I'm going to push a fix
and figure out a better solution later

2. `Bounds::intersect` could return negative-sized bounds when the two
bounds didn't overlap, instead of returning a zero sized bounds.

3. `Style::paint` sometimes passed invalid corner values to
`Bounds::from_corners` (where the computed bottom-right was above/left
of the top-left).

Release Notes:

- editor: Fix a crash that could happen when editor visible line height
is zero

---------

Co-authored-by: Zed Zippy
<234243425+zed-zippy[bot]@users.noreply.github.com>

Co-authored-by: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed The user has signed the Contributor License Agreement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Zed crashes if bottom dock overlaps multi-buffer area when viewing changes in the Git Panel

1 participant