Skip to content

Commit af0ffb2

Browse files
committed
Fix crash upon flood-filling when not connected
Also fix the distribution script not faking SDL constants and tool warnings about elements that others don't have in the room sometimes crashing, most likely due to a TOCTOU problem.
1 parent fc09205 commit af0ffb2

2 files changed

Lines changed: 35 additions & 18 deletions

File tree

client.lua

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ local ENV_DEFAULTS = {
2121
},
2222
tpt = { version = { upstreamBuild = 356 } },
2323
http = {},
24+
ui = setmetatable({}, { __index = function(tbl, key)
25+
if key:find("^SDL_") then
26+
return 0
27+
end
28+
if key:find("^SDLK_") then
29+
return 0
30+
end
31+
end }),
2432
socket = { tcp = function() end },
2533
}
2634

tptmp/client/profile/vanilla.lua

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -456,9 +456,7 @@ function profile_i:post_event_check_()
456456
end
457457
self:update_size_()
458458
self:update_shape_()
459-
if self.registered_func_() then
460-
self:update_tools_()
461-
end
459+
self:update_tools_()
462460
self:update_deco_()
463461
end
464462

@@ -671,34 +669,45 @@ function profile_i:update_tools_()
671669
local taid = tpt.selecteda
672670
local txid = tpt.selectedreplace
673671
if self.tool_lid_ ~= tlid then
674-
self.tool_l_ = self.xidr_.from_tool[tlid] or self.xidr_.unknown_xid
672+
if self.registered_func_() then
673+
self.tool_l_ = self.xidr_.from_tool[tlid] or self.xidr_.unknown_xid
674+
end
675675
self.tool_lid_ = tlid
676676
self:report_tool_(0)
677677
end
678678
if self.tool_rid_ ~= trid then
679-
self.tool_r_ = self.xidr_.from_tool[trid] or self.xidr_.unknown_xid
679+
if self.registered_func_() then
680+
self.tool_r_ = self.xidr_.from_tool[trid] or self.xidr_.unknown_xid
681+
end
680682
self.tool_rid_ = trid
681683
self:report_tool_(1)
682684
end
683685
if self.tool_aid_ ~= taid then
684-
self.tool_a_ = self.xidr_.from_tool[taid] or self.xidr_.unknown_xid
686+
if self.registered_func_() then
687+
self.tool_a_ = self.xidr_.from_tool[taid] or self.xidr_.unknown_xid
688+
end
685689
self.tool_aid_ = taid
686690
self:report_tool_(2)
687691
end
688692
if self.tool_xid_ ~= txid then
689-
self.tool_x_ = self.xidr_.from_tool[txid] or self.xidr_.unknown_xid
693+
if self.registered_func_() then
694+
self.tool_x_ = self.xidr_.from_tool[txid] or self.xidr_.unknown_xid
695+
end
690696
self.tool_xid_ = txid
691697
self:report_tool_(3)
692698
end
693-
local new_tool = self.xidr_.to_tool[self[index_to_lrax[self.last_toolslot_]]]
694-
local new_tool_id = self[index_to_lraxid[self.last_toolslot_]]
695-
if self.last_toolid_ ~= new_tool_id then
696-
if not new_tool_id:find("^DEFAULT_PT_LIFECUST_") then
697-
if toolwarn_tools[new_tool] then
698-
self.display_toolwarn_[toolwarn_tools[new_tool]] = true
699+
if self.registered_func_() then
700+
local new_tool = self.xidr_.to_tool[self[index_to_lrax[self.last_toolslot_]]]
701+
local new_tool_id = self[index_to_lraxid[self.last_toolslot_]]
702+
if self.last_toolid_ ~= new_tool_id then
703+
if not new_tool_id:find("^DEFAULT_PT_LIFECUST_") then
704+
if toolwarn_tools[new_tool] then
705+
self.display_toolwarn_[toolwarn_tools[new_tool]] = true
706+
self.display_toolwarn_identifier_ = new_tool_id
707+
end
699708
end
709+
self.last_toolid_ = new_tool_id
700710
end
701-
self.last_toolid_ = new_tool_id
702711
end
703712
end
704713

@@ -908,14 +917,12 @@ function profile_i:handle_mousedown(px, py, button)
908917
else
909918
return
910919
end
911-
if self.registered_func_() then
912-
self:update_tools_()
913-
end
920+
self:update_tools_()
914921
if next(self.display_toolwarn_) then
915922
if self.registered_func_() then
916923
for key in pairs(self.display_toolwarn_) do
917924
if key == "unknown" then
918-
local identifier = self[index_to_lraxid[self.last_toolslot_]]
925+
local identifier = self.display_toolwarn_identifier_
919926
local ids = self.xidr_unsupported_[identifier]
920927
local display_as = identifier
921928
if elem[identifier] then
@@ -1356,6 +1363,7 @@ end
13561363
function profile_i:xidr_sync()
13571364
if self.registered_func_() then
13581365
self.display_toolwarn_ = {}
1366+
self.display_toolwarn_identifier_ = nil
13591367
self.xidr_ = self.client_.xidr
13601368
self.xidr_unsupported_ = self.client_.xidr_unsupported
13611369
self.tool_l_ = self.xidr_.unknown_xid
@@ -1407,6 +1415,7 @@ local function new(params)
14071415
prof:update_bmode_()
14081416
prof:update_shape_()
14091417
prof:update_zoom_()
1418+
prof:update_tools_()
14101419
prof:check_signs({})
14111420
return prof
14121421
end

0 commit comments

Comments
 (0)