From 99d03320677c27ae0c68134001cb4f7e5e272e8a Mon Sep 17 00:00:00 2001 From: Chris Waldon Date: Fri, 27 May 2022 15:14:40 -0400 Subject: [PATCH] widget/material: prevent invalid list item constraints Previously, a bug in the ListStyle could result in items being passed a negative value in the minimum constraints. Signed-off-by: Chris Waldon --- widget/material/list.go | 6 ++++++ widget/material/list_test.go | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/widget/material/list.go b/widget/material/list.go index 4e560ad7..bdc0fcd6 100644 --- a/widget/material/list.go +++ b/widget/material/list.go @@ -257,7 +257,13 @@ func (l ListStyle) Layout(gtx layout.Context, length int, w layout.ListElement) max := l.state.Axis.Convert(gtx.Constraints.Max) min := l.state.Axis.Convert(gtx.Constraints.Min) max.Y -= barWidth + if max.Y < 0 { + max.Y = 0 + } min.Y -= barWidth + if min.Y < 0 { + min.Y = 0 + } gtx.Constraints.Max = l.state.Axis.Convert(max) gtx.Constraints.Min = l.state.Axis.Convert(min) } diff --git a/widget/material/list_test.go b/widget/material/list_test.go index 2a5866b4..e7c95a81 100644 --- a/widget/material/list_test.go +++ b/widget/material/list_test.go @@ -27,10 +27,15 @@ func TestListAnchorStrategies(t *testing.T) { Y: 500, }, }) + gtx.Constraints.Min = image.Point{} var spaceConstraints layout.Constraints space := func(gtx layout.Context, index int) layout.Dimensions { spaceConstraints = gtx.Constraints + if spaceConstraints.Min.X < 0 || spaceConstraints.Min.Y < 0 || + spaceConstraints.Max.X < 0 || spaceConstraints.Max.Y < 0 { + t.Errorf("invalid constraints at index %d: %#+v", index, spaceConstraints) + } return layout.Dimensions{Size: image.Point{ X: gtx.Constraints.Max.X, Y: gtx.Px(unit.Dp(20)),