unittests: Fix bug somewhere that makes file_read tests SEGV

This commit is contained in:
ZyX
2016-06-23 22:25:35 +03:00
parent 2dd154457c
commit a3b05a03b6
2 changed files with 10 additions and 3 deletions

View File

@@ -67,7 +67,10 @@ local function file_read(fp, size)
if size == nil then if size == nil then
size = 0 size = 0
else else
buf = ffi.new('char[?]', size, ('\0'):rep(size)) -- For some reason if length of NUL-bytes-string is the same as `char[?]`
-- size luajit garbage collector crashes. But it does not do so in
-- os_read[v] tests in os/fs_spec.lua.
buf = ffi.new('char[?]', size + 1, ('\0'):rep(size))
end end
local ret1 = m.file_read(fp, buf, size) local ret1 = m.file_read(fp, buf, size)
local ret2 = '' local ret2 = ''

View File

@@ -378,12 +378,16 @@ describe('fs function', function()
local function os_close(fd) local function os_close(fd)
return fs.os_close(fd) return fs.os_close(fd)
end end
-- For some reason if length of NUL-bytes-string is the same as `char[?]`
-- size luajit crashes. Though it does not do so in this test suite, better
-- be cautios and allocate more elements then needed. I only did this to
-- strings.
local function os_read(fd, size) local function os_read(fd, size)
local buf = nil local buf = nil
if size == nil then if size == nil then
size = 0 size = 0
else else
buf = ffi.new('char[?]', size, ('\0'):rep(size)) buf = ffi.new('char[?]', size + 1, ('\0'):rep(size))
end end
local eof = ffi.new('bool[?]', 1, {true}) local eof = ffi.new('bool[?]', 1, {true})
local ret2 = fs.os_read(fd, eof, buf, size) local ret2 = fs.os_read(fd, eof, buf, size)
@@ -398,7 +402,7 @@ describe('fs function', function()
local bufs = {} local bufs = {}
for i, size in ipairs(sizes) do for i, size in ipairs(sizes) do
bufs[i] = { bufs[i] = {
iov_base=ffi.new('char[?]', size, ('\0'):rep(size)), iov_base=ffi.new('char[?]', size + 1, ('\0'):rep(size)),
iov_len=size, iov_len=size,
} }
end end