aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandy Palamar <palamar@ualberta.ca>2023-08-27 09:01:01 -0600
committerRandy Palamar <palamar@ualberta.ca>2023-08-27 09:01:01 -0600
commit0ec372eb2b213292a610d9b64e8d1d37e9597c9a (patch)
tree24699676c727c503424f6e7d85c275d7572305e0
parent514fae450a53d6887f07aae729348c8fbbb52225 (diff)
downloadvis-0ec372eb2b213292a610d9b64e8d1d37e9597c9a.tar.gz
vis-0ec372eb2b213292a610d9b64e8d1d37e9597c9a.tar.xz
vis-lua.c: silence warning about implicit conversion
`SIZE_MAX` cannot be represented accurately in `lua_Number`. A correct solution probably doesn't exist but we can silence the warning by explicitly casting to `lua_Number` and changing the comparison to `<` instead of `<=`. checkpos() deals with large numbers for file ranges. For most users we can assume no one is editing files that are `SIZE_MAX` bytes long (many petabytes). For obscure systems where `SIZE_MAX` is a small number this will result in a maximum range (in lua) of 1 byte less than before. fixes #1120: vis-lua.c:504:21: warning: implicit conversion changes value
-rw-r--r--vis-lua.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/vis-lua.c b/vis-lua.c
index acc48d2..bee077c 100644
--- a/vis-lua.c
+++ b/vis-lua.c
@@ -501,7 +501,11 @@ static size_t getpos(lua_State *L, int narg) {
static size_t checkpos(lua_State *L, int narg) {
lua_Number n = luaL_checknumber(L, narg);
- if (n >= 0 && n <= SIZE_MAX && n == (size_t)n)
+ /* on most systems SIZE_MAX can't be represented in lua_Number.
+ * using < avoids undefined behaviour when n == SIZE_MAX+1
+ * which can be represented in lua_Number
+ */
+ if (n >= 0 && n < (lua_Number)SIZE_MAX && n == (size_t)n)
return n;
return luaL_argerror(L, narg, "expected position, got number");
}