Skip to content

Commit

Permalink
Merge pull request #827 from saurtron/fix-unsafe-socket-usage
Browse files Browse the repository at this point in the history
Fix not closing sockets and bad timeout error condition checks.
  • Loading branch information
AntlerForce authored Nov 30, 2024
2 parents 97fdf71 + fb31c76 commit c324709
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 4 deletions.
12 changes: 9 additions & 3 deletions LuaMenu/widgets/api_analytics.lua
Original file line number Diff line number Diff line change
Expand Up @@ -139,11 +139,16 @@ end


local function SocketConnect(host, port)
if client then
client:close()
end
client=socket.tcp()
client:settimeout(0)
res, err = client:connect(host, port)
if not res and not res=="timeout" then
if not res and err ~= "timeout" then
if PRINT_DEBUG then Spring.Echo("Error in connection to Analytics server: "..err) end
client:close()
client = nil
return false
end
if PRINT_DEBUG then Spring.Echo("Analytics connected") end
Expand Down Expand Up @@ -652,8 +657,8 @@ local function LobbyInfo()
local message = "c.telemetry.log_client_event lobby:info " .. Spring.Utilities.Base64Encode(Spring.Utilities.json.encode(t)).." ".. machineHash .. "\n"
local client=socket.tcp()
local res, err = client:connect(host, port)
if not res and not res=="timeout" then Spring.Echo("Lobby:Info Error", res, err) else client:send(message) end
if client ~= nil then client:close() end
if not res and err ~= "timeout" then Spring.Echo("Lobby:Info Error", res, err) else client:send(message) end
client:close()
end
end

Expand Down Expand Up @@ -735,6 +740,7 @@ function widget:Initialize()
isConnected = true
if client ~= nil then
client:close()
client = nil
end
ACTIVE = false
-- disconnect
Expand Down
1 change: 1 addition & 0 deletions libs/liblobby/lobby/interface_shared.lua
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ function Interface:Disconnect(reason)
self.finishedConnecting = false
if self.client then
self.client:close()
self.client = nil
end
self:_OnDisconnected(reason, true)
end
Expand Down
7 changes: 6 additions & 1 deletion libs/spring-launcher/luaui/widgets/api_spring_launcher.lua
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,15 @@ local function explode(div,str)
end

function widget:SocketConnect()
if client then
client:close()
end
client = socket.tcp()
client:settimeout(0)
local res, err = client:connect(host, port)
if not res and not res == "timeout" then
if not res and err ~= "timeout" then
client:close()
client = nil
widgetHandler:RemoveWidget(self)
Spring.Log(LOG_SECTION, LOG.ERROR, "Error in connect launcher: " .. err)
return false
Expand Down

0 comments on commit c324709

Please sign in to comment.