Skip to content

Commit

Permalink
vis-lua.c: silence warning about implicit conversion
Browse files Browse the repository at this point in the history
`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
  • Loading branch information
rnpnr committed Aug 27, 2023
1 parent 514fae4 commit 0ec372e
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion vis-lua.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}
Expand Down

0 comments on commit 0ec372e

Please sign in to comment.