Skip to content

Commit dba9490

Browse files
committed
luzer: fix type in consume_number()
The implementation of FDP methods `consume_number()` and `consume_numbers()` are used type `double` for arguments of aforementioned functions. The Lua type `lua_Number` can be not a `double` and it is defined compile-time. The patch replaces `double` with `lua_Number` to avoid overflows. Follows up #29
1 parent d8bab62 commit dba9490

File tree

3 files changed

+14
-9
lines changed

3 files changed

+14
-9
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2222
- Disable coverage instrumentation of internal functions (#11).
2323
- Add missed newlines to messages.
2424
- Rename `_VERSION` to a `_LUZER_VERSION`.
25+
- Use `lua_Number` in FDP methods `consume_number()` and
26+
`consume_numbers()` instead `double`.
2527

2628
### Fixed
2729

luzer/fuzzed_data_provider.cc

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,12 @@ luaL_consume_number(lua_State *L)
110110
{
111111
lua_userdata_t *lfdp;
112112
lfdp = (lua_userdata_t *)luaL_checkudata(L, 1, FDP_LUA_UDATA_NAME);
113-
double min = luaL_checknumber(L, 2);
114-
double max = luaL_checknumber(L, 3);
113+
lua_Number min = luaL_checknumber(L, 2);
114+
lua_Number max = luaL_checknumber(L, 3);
115115
if (min > max)
116116
luaL_error(L, "min must be less than or equal to max");
117117

118-
auto number = lfdp->fdp->ConsumeFloatingPointInRange(min, max);
118+
lua_Number number = lfdp->fdp->ConsumeFloatingPointInRange(min, max);
119119
lua_pushnumber(L, number);
120120

121121
return 1;
@@ -127,15 +127,15 @@ luaL_consume_numbers(lua_State *L)
127127
{
128128
lua_userdata_t *lfdp;
129129
lfdp = (lua_userdata_t *)luaL_checkudata(L, 1, FDP_LUA_UDATA_NAME);
130-
int count = luaL_checkinteger(L, 2);
131-
double min = luaL_checkinteger(L, 3);
132-
double max = luaL_checkinteger(L, 4);
130+
lua_Integer count = luaL_checkinteger(L, 2);
131+
lua_Number min = luaL_checkinteger(L, 3);
132+
lua_Number max = luaL_checkinteger(L, 4);
133133
if (min > max)
134134
luaL_error(L, "min must be less than or equal to max");
135135

136136
lua_newtable(L);
137-
for (int i = 1; i <= count; i++) {
138-
auto number = lfdp->fdp->ConsumeFloatingPointInRange(min, max);
137+
for (lua_Integer i = 1; i <= count; i++) {
138+
lua_Number number = lfdp->fdp->ConsumeFloatingPointInRange(min, max);
139139
lua_pushnumber(L, i);
140140
lua_pushnumber(L, number);
141141
lua_settable(L, -3);

luzer/tests/test_unit.lua

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,9 @@ ok, err = pcall(fdp.consume_number)
131131
assert(ok == false)
132132
assert(err ~= nil)
133133

134+
local num = fdp:consume_number(1, MAX_INT)
135+
assert(type(num) == "number")
136+
134137
-- luzer.FuzzedDataProvider.consume_numbers()
135138
fdp = luzer.FuzzedDataProvider("ABCDEF")
136139
assert(type(fdp.consume_numbers) == "function")
@@ -160,7 +163,7 @@ assert(err ~= nil)
160163

161164
local max_int = fdp:consume_integer(MAX_INT, MAX_INT)
162165
assert(type(max_int) == "number")
163-
-- FIXME: assert(max_int == MAX_INT, max_int)
166+
assert(max_int == MAX_INT, max_int)
164167

165168
local min_int = fdp:consume_integer(MIN_INT, MIN_INT)
166169
assert(type(min_int) == "number")

0 commit comments

Comments
 (0)