From 3ebfba7f5b10c4b14763d81a4aed5cdd3db2cea5 Mon Sep 17 00:00:00 2001 From: Mahmoud Al-Qudsi Date: Sun, 25 Sep 2022 12:37:10 -0500 Subject: [PATCH] Test return builtin doesn't map negative numbers to zero Prior to 1811a2d, the return value for negative return codes was UB and I'd witnessed both expected cases like -256 mapping to a $status of 0 and unexpected cases like a return value of -1 mapping to a $status of 0. As such, this doesn't test just one fixed return value but the entire range from negative multiples of 256 all the way down (rather, up!) to -1. --- tests/checks/return.fish | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/checks/return.fish b/tests/checks/return.fish index b63e336e4..9c2d7a4c5 100644 --- a/tests/checks/return.fish +++ b/tests/checks/return.fish @@ -20,3 +20,16 @@ $fish -ic 'echo interactive-foo; return 69; echo interactive-bar' # but not bar echo $status # CHECK: 69 + +# Verify negative return values don't cause UB and never map to 0 +function empty_return + return $argv[1] +end + +for i in (seq -550 -1) + empty_return $i + if test $status -eq 0 + echo returning $i from a fish script maps to a $status of 0! + end +end +# CHECK: