diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2024-12-16 07:19:45 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2024-12-16 07:19:45 -0800 |
commit | a8865b05a43b94c7193d27a8a574eeaeffd9c2e7 (patch) | |
tree | c037696a774b11b885738a0aa60d5fd2a4e9cfff | |
parent | a3532279d5d16f1f69bff1bae06f477cdbc53b0f (diff) | |
download | txr-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.c | 3 |
1 files changed, 2 insertions, 1 deletions
@@ -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); |