From 28c6c7b7b08592caf15d9a910bfe3fb773a6ae8b Mon Sep 17 00:00:00 2001 From: zsfelfoldi Date: Mon, 19 Jan 2026 03:37:24 +0100 Subject: [PATCH] common: add corner case checks to Range --- common/range.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/common/range.go b/common/range.go index c3a26ea7f5..aefd0c16d9 100644 --- a/common/range.go +++ b/common/range.go @@ -27,7 +27,11 @@ type Range[T uint32 | uint64] struct { // NewRange creates a new range based of first element and number of elements. func NewRange[T uint32 | uint64](first, count T) Range[T] { - return Range[T]{first, first + count} + afterLast := first + count + if afterLast < first { + panic("range overflow") + } + return Range[T]{first, afterLast} } // First returns the first element of the range. @@ -97,6 +101,12 @@ func (r Range[T]) Intersection(q Range[T]) Range[T] { // Union returns the union of two ranges. Panics for gapped ranges. func (r Range[T]) Union(q Range[T]) Range[T] { + if r.IsEmpty() { + return q + } + if q.IsEmpty() { + return r + } if max(r.first, q.first) > min(r.afterLast, q.afterLast) { panic("cannot create union; gap between ranges") }