From 5a92aa2b51cc125de9285436604d4ddaee041ebe Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Sat, 15 Mar 2025 18:03:44 +0100 Subject: [PATCH] [plugin] HttpInspector: avoid crash when port can't be bound (#13421) See . --- frontend/ui/message/simpletcpserver.lua | 8 +++++++- plugins/httpinspector.koplugin/main.lua | 16 ++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/frontend/ui/message/simpletcpserver.lua b/frontend/ui/message/simpletcpserver.lua index 0e63d1540..f37e82b44 100644 --- a/frontend/ui/message/simpletcpserver.lua +++ b/frontend/ui/message/simpletcpserver.lua @@ -1,5 +1,7 @@ local socket = require("socket") local logger = require("logger") +local _ = require("gettext") +local T = require("ffi/util").template -- Reference: -- https://lunarmodules.github.io/luasocket/tcp.html @@ -23,7 +25,11 @@ function SimpleTCPServer:new(o) end function SimpleTCPServer:start() - self.server = socket.bind(self.host, self.port) + local server, err = socket.bind(self.host, self.port) + if not server then + return false, (err and T(_("Failed to bind socket: %1"), err) or _("Failed to bind socket")) + end + self.server = server self.server:settimeout(0.01) -- set timeout (10ms) logger.dbg("SimpleTCPServer: Server listening on port " .. self.port) end diff --git a/plugins/httpinspector.koplugin/main.lua b/plugins/httpinspector.koplugin/main.lua index 7a2d90476..d8418fe68 100644 --- a/plugins/httpinspector.koplugin/main.lua +++ b/plugins/httpinspector.koplugin/main.lua @@ -100,10 +100,18 @@ function HttpInspector:start() port = self.port, receiveCallback = function(data, id) return self:onRequest(data, id) end, } - self.http_socket:start() - self.http_messagequeue = UIManager:insertZMQ(self.http_socket) - - logger.dbg("HttpInspector: Server listening on port " .. self.port) + local ok, err = self.http_socket:start() + if ok then + self.http_messagequeue = UIManager:insertZMQ(self.http_socket) + logger.dbg("HttpInspector: Server listening on port " .. self.port) + else + logger.err("HttpInspector: Failed to start server:", err) + self.http_socket = nil + local InfoMessage = require("ui/widget/infomessage") + UIManager:show(InfoMessage:new{ + text = T(_("Failed to start HTTP inspector on port %1."), self.port) .. "\n\n" .. err, + }) + end end function HttpInspector:stop()