summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2024-12-16 07:19:45 -0800
committerKaz Kylheku <kaz@kylheku.com>2024-12-16 07:19:45 -0800
commita8865b05a43b94c7193d27a8a574eeaeffd9c2e7 (patch)
treec037696a774b11b885738a0aa60d5fd2a4e9cfff
parenta3532279d5d16f1f69bff1bae06f477cdbc53b0f (diff)
downloadtxr-a8865b05a43b94c7193d27a8a574eeaeffd9c2e7.tar.gz
txr-a8865b05a43b94c7193d27a8a574eeaeffd9c2e7.tar.bz2
txr-a8865b05a43b94c7193d27a8a574eeaeffd9c2e7.zip
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.
-rw-r--r--lib.c3
1 files changed, 2 insertions, 1 deletions
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);