From 2ae91ac6f6a8222074c4e43aefd4b1f8c2f15edc Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 7 Nov 2019 20:37:02 +0100 Subject: [PATCH] [fix] Prevent crash on local calibre OPDS server (#5572) Close: #5476 - Prevent segmentation fault when we enter incorrect address of calibre opds server (eg http://192.168.1.1:8080/ instead of proper http://192.168.1.1:8080/opds - prevent unnecessary infos in Gutenberg OPDS --- frontend/ui/opdsparser.lua | 2 +- frontend/ui/widget/opdsbrowser.lua | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/frontend/ui/opdsparser.lua b/frontend/ui/opdsparser.lua index 893a523d2..e5f681bf2 100644 --- a/frontend/ui/opdsparser.lua +++ b/frontend/ui/opdsparser.lua @@ -84,7 +84,7 @@ function OPDSParser:parse(text) return s:gsub( "%p", {["&"] = "&", ["<"] = "<", [">"] = ">" } ) end ) local xlex = luxl.new(text, #text) - return self:createFlatXTable(xlex) + return assert(self:createFlatXTable(xlex)) end return OPDSParser diff --git a/frontend/ui/widget/opdsbrowser.lua b/frontend/ui/widget/opdsbrowser.lua index 1559c429f..876865309 100644 --- a/frontend/ui/widget/opdsbrowser.lua +++ b/frontend/ui/widget/opdsbrowser.lua @@ -298,6 +298,9 @@ function OPDSBrowser:fetchFeed(item_url, username, password, method) if xml ~= "" then return xml end + elseif method == "HEAD" then + -- Don't show error messages when we check headers only. + return elseif code == 301 then UIManager:show(InfoMessage:new{ text = T(_("The catalog has been permanently moved. Please update catalog URL to '%1'."), headers['Location']), @@ -401,6 +404,11 @@ function OPDSBrowser:genItemTableFromCatalog(catalog, item_url, username, passwo end if not feed.entry then + if #hrefs == 0 then + UIManager:show(InfoMessage:new{ + text = _("Catalog not found."), + }) + end return item_table end