diff --git a/commafeed-server/src/main/java/com/commafeed/backend/favicon/Favicon.java b/commafeed-server/src/main/java/com/commafeed/backend/favicon/Favicon.java index 4e2ea9e5..67f6daa7 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/favicon/Favicon.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/favicon/Favicon.java @@ -17,7 +17,7 @@ public record Favicon(byte[] icon, MediaType mediaType) { try { return MediaType.valueOf(contentType); } catch (Exception e) { - log.debug("invalid content type '{}' received, returning default value", contentType); + log.debug("invalid content type '{}' received, returning default value", contentType, e); return DEFAULT_MEDIA_TYPE; } } diff --git a/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshEngine.java b/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshEngine.java index 43d593f3..6c3b52c1 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshEngine.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshEngine.java @@ -164,9 +164,11 @@ public class FeedRefreshEngine { Instant lastLoginThreshold = config.feedRefresh().userInactivityPeriod().isZero() ? null : Instant.now().minus(config.feedRefresh().userInactivityPeriod()); List feeds = feedDAO.findNextUpdatable(max, lastLoginThreshold); - // update disabledUntil to prevent feeds from being returned again by feedDAO.findNextUpdatable() - Instant nextUpdateDate = Instant.now().plus(config.feedRefresh().interval()); - feedDAO.setDisabledUntil(feeds.stream().map(AbstractModel::getId).toList(), nextUpdateDate); + if (!feeds.isEmpty()) { + // update disabledUntil to prevent feeds from being returned again by feedDAO.findNextUpdatable() + Instant nextUpdateDate = Instant.now().plus(config.feedRefresh().interval()); + feedDAO.setDisabledUntil(feeds.stream().map(AbstractModel::getId).toList(), nextUpdateDate); + } return feeds; }); } diff --git a/commafeed-server/src/main/java/com/commafeed/backend/opml/OPMLImporter.java b/commafeed-server/src/main/java/com/commafeed/backend/opml/OPMLImporter.java index dd4b08d2..ac575c5b 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/opml/OPMLImporter.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/opml/OPMLImporter.java @@ -30,7 +30,11 @@ public class OPMLImporter { private final FeedSubscriptionService feedSubscriptionService; public void importOpml(User user, String xml) throws IllegalArgumentException, FeedException { - xml = xml.substring(xml.indexOf('<')); + int index = xml.indexOf('<'); + if (index == -1) { + throw new IllegalArgumentException("Invalid OPML: no start tag found"); + } + xml = xml.substring(index); WireFeedInput input = new WireFeedInput(); Opml feed = (Opml) input.build(new StringReader(xml)); List outlines = feed.getOutlines(); diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/CategoryREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/CategoryREST.java index 93ce753b..c8592628 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/CategoryREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/CategoryREST.java @@ -337,7 +337,7 @@ public class CategoryREST { } FeedCategory parent = null; - if (req.getParentId() != null && !CategoryREST.ALL.equals(req.getParentId()) + if (req.getParentId() != null && !ALL.equals(req.getParentId()) && !Strings.CS.equals(req.getParentId(), String.valueOf(req.getId()))) { parent = feedCategoryDAO.findById(user, Long.valueOf(req.getParentId())); } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java index 9e857c4f..b156f111 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java @@ -181,7 +181,7 @@ public class FeedREST { boolean hasMore = entries.getEntries().size() > limit; if (hasMore) { entries.setHasMore(true); - entries.getEntries().remove(entries.getEntries().size() - 1); + entries.getEntries().removeLast(); } } else { return Response.status(Status.NOT_FOUND).entity("feed not found").build();