From 560769f068d4fb8fa325b5d3460550090f6815b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vitor=20Mar=C3=A7al?= Date: Sat, 4 Nov 2023 05:56:06 -0300 Subject: [PATCH] Fix RSS feed not handling None values (#569) Previously, the 'sanitize' function would throw an error when 'text' was None. This commit fixes the issue by adding a check to handle the case where 'text' is None, returning an empty string instead. Closes #568 --- bookmarks/feeds.py | 2 ++ bookmarks/tests/test_feeds.py | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/bookmarks/feeds.py b/bookmarks/feeds.py index ff7362a..cec2129 100644 --- a/bookmarks/feeds.py +++ b/bookmarks/feeds.py @@ -16,6 +16,8 @@ class FeedContext: def sanitize(text: str): + if not text: + return '' # remove control characters valid_chars = ['\n', '\r', '\t'] return ''.join(ch for ch in text if ch in valid_chars or unicodedata.category(ch)[0] != 'C') diff --git a/bookmarks/tests/test_feeds.py b/bookmarks/tests/test_feeds.py index 4d28df9..ee0ae38 100644 --- a/bookmarks/tests/test_feeds.py +++ b/bookmarks/tests/test_feeds.py @@ -7,6 +7,8 @@ from django.urls import reverse from bookmarks.tests.helpers import BookmarkFactoryMixin from bookmarks.models import FeedToken, User +from bookmarks.feeds import sanitize + def rfc2822_date(date): @@ -112,6 +114,9 @@ class FeedsTestCase(TestCase, BookmarkFactoryMixin): self.assertContains(response, f'test\n\r\ttitle', count=1) self.assertContains(response, f'test\n\r\tdescription', count=1) + def test_sanitize_with_none_text(self): + self.assertEqual('', sanitize(None)) + def test_unread_returns_404_for_unknown_feed_token(self): response = self.client.get(reverse('bookmarks:feeds.unread', args=['foo']))