Compare commits

...

3 Commits

Author SHA1 Message Date
Not ef620772d9 remove entries with invalid data 2023-10-13 22:19:08 +02:00
Not 46f787f543 parse some header values as numbers 2023-10-13 21:52:14 +02:00
Not d0e3698ee4 answer command stream only once 2023-10-13 21:31:54 +02:00
1 changed files with 28 additions and 6 deletions

View File

@ -123,9 +123,16 @@ Ghosts = {
this:reset()
local headers = Index:getMap(gamemap, mapChecksum(gamemap))
local data
local ok, data
for _, header in ipairs(headers) do
data = Ghost.read(header, Ghost.tableReader)
ok, data = pcall(Ghost.read, header, Ghost.tableReader)
if not ok then
print(data)
print("\x85\ERROR:\x80 invalid ghost data, removing entry")
Index:remove(header)
Index:write()
continue
end
this:set(header, data)
end
end,
@ -406,6 +413,10 @@ Server = {
transmitters = {},
callback = function(cmd, handle)
if handle.transmitters[cmd] then
return
end
local mapindex = Index:getMap(gamemap, mapChecksum(gamemap))
local header = assert(mapindex[tonumber(cmd)])
local data = Ghost.read(header, Ghost.stringReader)
@ -579,7 +590,7 @@ local function open(filename, mode, fn)
f:close()
if not ok then
err = string.format("%s\n(%s (%s))", err, filename, mode)
err = string.format("%s\n(\x82%s\x80 (%s))", err, filename, mode)
end
return ok, err
@ -602,6 +613,17 @@ Index = {
this:setMap(header.map, header.checksum, map)
end,
remove = function(this, header)
local map = this:getMap(header.map, header.checksum)
for i, h in ipairs(map) do
if h.player == header.player then
map[i] = nil
this:setMap(header.map, header.checksum, map)
return
end
end
end,
find = function(this, header)
local index = this:getMap(header.map, header.checksum)
for i, h in ipairs(index) do
@ -645,10 +667,10 @@ Index = {
map = c:next(),
checksum = c:next(),
player = c:next(),
time = c:next(),
flags = c:next(),
time = tonumber(c:next()),
flags = tonumber(c:next()),
skin = c:next(),
color = c:next()
color = tonumber(c:next())
}
end,