From 8fe9e3c3fef0049df82281a62afe35dda516dfe2 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Fri, 18 Sep 2026 17:48:26 -0400 Subject: fix: close combat ghost, admin traversal, login throttle, journal double-pay, and quality/economy gaps --- internal/engine/tick.go | 11 +++++++++++ internal/engine/tick_values_test.go | 20 ++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 internal/engine/tick_values_test.go (limited to 'internal/engine') diff --git a/internal/engine/tick.go b/internal/engine/tick.go index 68dd54f..8c64cdd 100644 --- a/internal/engine/tick.go +++ b/internal/engine/tick.go @@ -4,6 +4,7 @@ package engine import ( "math/rand" + "reflect" "sort" "sync" "time" @@ -171,6 +172,16 @@ func ValuesEqual(a, b any) bool { if aok && bok { return ai == bi } + // == panics when both operands share an uncomparable dynamic type (a + // YAML list or map used as a flag value). Fall back to DeepEqual so a + // tick system cannot panic on authored content. + ta, tb := reflect.TypeOf(a), reflect.TypeOf(b) + if ta != tb { + return false + } + if ta != nil && !ta.Comparable() { + return reflect.DeepEqual(a, b) + } return a == b } diff --git a/internal/engine/tick_values_test.go b/internal/engine/tick_values_test.go new file mode 100644 index 0000000..4c704bb --- /dev/null +++ b/internal/engine/tick_values_test.go @@ -0,0 +1,20 @@ +package engine + +import "testing" + +// TestValuesEqualUncomparableDoesNotPanic: a YAML list/map flag value must not +// panic a tick system when compared (== panics on uncomparable dynamic types). +func TestValuesEqualUncomparableDoesNotPanic(t *testing.T) { + if !ValuesEqual([]any{1, 2}, []any{1, 2}) { + t.Fatal("equal slices should compare equal") + } + if ValuesEqual([]any{1, 2}, []any{1, 3}) { + t.Fatal("different slices should not compare equal") + } + if !ValuesEqual(map[string]any{"x": 1}, map[string]any{"x": 1}) { + t.Fatal("equal maps should compare equal") + } + if ValuesEqual(map[string]any{"x": 1}, map[string]any{"x": 2}) { + t.Fatal("different maps should not compare equal") + } +} -- cgit v1.2.3