From a8865b05a43b94c7193d27a8a574eeaeffd9c2e7 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Mon, 16 Dec 2024 07:19:45 -0800 Subject: bug: string range length signed/unsigned. * lib.c (length_str_range): On platforms where wchar_t is unsigned, we calculate bogus values for reversed ranges. On Android, gcc warns about the code, and the recently added tests fail. Let's cast the characters to long before doing the subtraction, which is the argument type of labs. --- lib.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'lib.c') diff --git a/lib.c b/lib.c index 11cf3340..512810f2 100644 --- a/lib.c +++ b/lib.c @@ -564,7 +564,8 @@ static val length_str_range(val from, val to) cnum i; for (i = 0; fs[i]; i++) - out = mul(out, num(labs(ts[i] - fs[i]) + 1)); + out = mul(out, num(labs(convert(long, ts[i]) - + convert(long, fs[i])) + 1)); gc_hint(from); gc_hint(to); -- cgit v1.2.3