From 7bd036af0821040891c67cdbf459c1de804108ee Mon Sep 17 00:00:00 2001
From: L2501 <L2501@users.noreply.github.com>
Date: Mon, 11 Dec 2023 21:25:19 +0000
Subject: [PATCH] [script.module.feedparser] 6.0.11

---
 .../{LICENSE => LICENSE.txt}                  |   4 +-
 script.module.feedparser/README.rst           |  46 ------------------
 script.module.feedparser/addon.xml            |  34 ++++++-------
 .../lib/feedparser/__init__.py                |   4 +-
 .../lib/feedparser/api.py                     |  12 ++++-
 .../lib/feedparser/datetimes/__init__.py      |   2 +-
 .../lib/feedparser/datetimes/asctime.py       |   2 +-
 .../lib/feedparser/datetimes/greek.py         |   2 +-
 .../lib/feedparser/datetimes/hungarian.py     |   2 +-
 .../lib/feedparser/datetimes/iso8601.py       |   2 +-
 .../lib/feedparser/datetimes/korean.py        |   2 +-
 .../lib/feedparser/datetimes/perforce.py      |   2 +-
 .../lib/feedparser/datetimes/rfc822.py        |   2 +-
 .../lib/feedparser/datetimes/w3dtf.py         |   2 +-
 .../lib/feedparser/encodings.py               |  33 ++++++++++---
 .../lib/feedparser/exceptions.py              |   2 +-
 .../lib/feedparser/html.py                    |   2 +-
 .../lib/feedparser/http.py                    |  21 ++++++--
 .../lib/feedparser/mixin.py                   |   7 ++-
 .../lib/feedparser/namespaces/_base.py        |   9 ++--
 .../lib/feedparser/namespaces/admin.py        |   2 +-
 .../lib/feedparser/namespaces/cc.py           |   2 +-
 .../lib/feedparser/namespaces/dc.py           |   2 +-
 .../lib/feedparser/namespaces/georss.py       |   4 +-
 .../lib/feedparser/namespaces/itunes.py       |   2 +-
 .../lib/feedparser/namespaces/mediarss.py     |   2 +-
 .../lib/feedparser/namespaces/psc.py          |   2 +-
 .../lib/feedparser/parsers/loose.py           |   2 +-
 .../lib/feedparser/parsers/strict.py          |   2 +-
 .../lib/feedparser/sanitizer.py               |   2 +-
 .../lib/feedparser/sgml.py                    |   2 +-
 .../lib/feedparser/urls.py                    |   2 +-
 .../lib/feedparser/util.py                    |   2 +-
 .../{ => resources}/icon.png                  | Bin
 34 files changed, 110 insertions(+), 110 deletions(-)
 rename script.module.feedparser/{LICENSE => LICENSE.txt} (96%)
 delete mode 100644 script.module.feedparser/README.rst
 rename script.module.feedparser/{ => resources}/icon.png (100%)

diff --git a/script.module.feedparser/LICENSE b/script.module.feedparser/LICENSE.txt
similarity index 96%
rename from script.module.feedparser/LICENSE
rename to script.module.feedparser/LICENSE.txt
index 3ce95b12b..70b8167f3 100644
--- a/script.module.feedparser/LICENSE
+++ b/script.module.feedparser/LICENSE.txt
@@ -2,7 +2,7 @@ feedparser and its unit tests are released under the following license:
 
 ----- begin license block -----
 
-Copyright (C) 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+Copyright (C) 2010-2022 Kurt McKee <contactme@kurtmckee.org>
 Copyright (C) 2002-2008 Mark Pilgrim
 All rights reserved.
 
@@ -38,7 +38,7 @@ released under the following license:
 
 ----- begin license block -----
 
-Copyright (C) 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+Copyright (C) 2010-2022 Kurt McKee <contactme@kurtmckee.org>
 Copyright (C) 2004-2008 Mark Pilgrim. All rights reserved.
 
 Redistribution and use in source (Sphinx ReST) and "compiled" forms (HTML, PDF,
diff --git a/script.module.feedparser/README.rst b/script.module.feedparser/README.rst
deleted file mode 100644
index d49535b38..000000000
--- a/script.module.feedparser/README.rst
+++ /dev/null
@@ -1,46 +0,0 @@
-feedparser - Parse Atom and RSS feeds in Python.
-
-| Copyright 2010-2019 Kurt McKee <contactme@kurtmckee.org>
-| Copyright 2002-2008 Mark Pilgrim
-
-feedparser is open source. See the LICENSE file for more information.
-
-
-Installation
-============
-
-Feedparser can be installed using distutils or setuptools by running::
-
-    $ python setup.py install
-
-Note: sgmllib3k is a Python 3 dependency. It will be installed automatically.
-
-
-Documentation
-=============
-
-The feedparser documentation is available on the web at:
-
-    https://pythonhosted.org/feedparser/
-
-It is also included in its source format, ReST, in the docs/ directory. To
-build the documentation you'll need the Sphinx package, which is available at:
-
-    http://sphinx.pocoo.org/
-
-You can then build HTML pages using a command similar to::
-
-    $ sphinx-build -b html docs/ fpdocs
-
-This will produce HTML documentation in the fpdocs/ directory.
-
-
-Testing
-=======
-
-Feedparser has an extensive test suite, powered by tox. To run it, type this::
-
-    $ tox
-
-This will spawn an HTTP server that will listen on port 8097. The tests will
-fail if that port is in use.
diff --git a/script.module.feedparser/addon.xml b/script.module.feedparser/addon.xml
index a74c0bb21..fe9755fdb 100644
--- a/script.module.feedparser/addon.xml
+++ b/script.module.feedparser/addon.xml
@@ -1,19 +1,19 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="script.module.feedparser" name="feedparser" version="6.0.2" provider-name="Kurt McKee">
-    <requires>
-        <import addon="xbmc.python" version="3.0.0"/>
-        <import addon="script.module.sgmllib3k" version="1.0.0+matrix.1"/>
-    </requires>
-    <extension point="xbmc.python.module" library="lib"/>
-    <extension point="xbmc.addon.metadata">
-        <language></language>
-        <summary lang="en_GB">Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds</summary>
-        <description lang="en_GB">Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds</description>
-        <license>MIT</license>
-        <platform>all</platform>
-        <source>https://github.com/kurtmckee/feedparser</source>
-        <assets>
-            <icon>icon.png</icon>
-        </assets>
-    </extension>
+<addon id="script.module.feedparser" name="feedparser" version="6.0.11" provider-name="Kurt McKee">
+  <requires>
+    <import addon="xbmc.python" version="3.0.0" />
+    <import addon="script.module.sgmllib3k" version="1.0.0+matrix.1" />
+  </requires>
+  <extension point="xbmc.python.module" library="lib" />
+  <extension point="xbmc.addon.metadata">
+    <summary lang="en_GB">Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds</summary>
+    <description lang="en_GB">Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds</description>
+    <license>BSD-2-Clause</license>
+    <platform>all</platform>
+    <website>https://github.com/kurtmckee/feedparser</website>
+    <source>https://github.com/kurtmckee/feedparser</source>
+    <assets>
+      <icon>resources/icon.png</icon>
+    </assets>
+  </extension>
 </addon>
diff --git a/script.module.feedparser/lib/feedparser/__init__.py b/script.module.feedparser/lib/feedparser/__init__.py
index c3fcfe609..a9607801c 100644
--- a/script.module.feedparser/lib/feedparser/__init__.py
+++ b/script.module.feedparser/lib/feedparser/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
@@ -32,7 +32,7 @@
 
 __author__ = 'Kurt McKee <contactme@kurtmckee.org>'
 __license__ = 'BSD 2-clause'
-__version__ = '6.0.2'
+__version__ = '6.0.11'
 
 # HTTP "User-Agent" header to send to servers when downloading feeds.
 # If you are embedding feedparser in a larger application, you should
diff --git a/script.module.feedparser/lib/feedparser/api.py b/script.module.feedparser/lib/feedparser/api.py
index 831c61ae9..1fe40979c 100644
--- a/script.module.feedparser/lib/feedparser/api.py
+++ b/script.module.feedparser/lib/feedparser/api.py
@@ -1,5 +1,5 @@
 # The public API for feedparser
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
@@ -27,6 +27,7 @@
 # POSSIBILITY OF SUCH DAMAGE.
 
 import io
+import urllib.error
 import urllib.parse
 import xml.sax
 
@@ -211,7 +212,14 @@ def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, refer
         headers={},
     )
 
-    data = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers, result)
+    try:
+        data = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers, result)
+    except urllib.error.URLError as error:
+        result.update({
+            'bozo': True,
+            'bozo_exception': error,
+        })
+        return result
 
     if not data:
         return result
diff --git a/script.module.feedparser/lib/feedparser/datetimes/__init__.py b/script.module.feedparser/lib/feedparser/datetimes/__init__.py
index 01b96f4ea..2837838ba 100644
--- a/script.module.feedparser/lib/feedparser/datetimes/__init__.py
+++ b/script.module.feedparser/lib/feedparser/datetimes/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/datetimes/asctime.py b/script.module.feedparser/lib/feedparser/datetimes/asctime.py
index e44326313..99416f664 100644
--- a/script.module.feedparser/lib/feedparser/datetimes/asctime.py
+++ b/script.module.feedparser/lib/feedparser/datetimes/asctime.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/datetimes/greek.py b/script.module.feedparser/lib/feedparser/datetimes/greek.py
index 91d0e1dad..3a4db7148 100644
--- a/script.module.feedparser/lib/feedparser/datetimes/greek.py
+++ b/script.module.feedparser/lib/feedparser/datetimes/greek.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/datetimes/hungarian.py b/script.module.feedparser/lib/feedparser/datetimes/hungarian.py
index 266c0c1fd..63fa9afd1 100644
--- a/script.module.feedparser/lib/feedparser/datetimes/hungarian.py
+++ b/script.module.feedparser/lib/feedparser/datetimes/hungarian.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/datetimes/iso8601.py b/script.module.feedparser/lib/feedparser/datetimes/iso8601.py
index 65b35b584..e78764592 100644
--- a/script.module.feedparser/lib/feedparser/datetimes/iso8601.py
+++ b/script.module.feedparser/lib/feedparser/datetimes/iso8601.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/datetimes/korean.py b/script.module.feedparser/lib/feedparser/datetimes/korean.py
index 1ad638d92..5fe4eb6f9 100644
--- a/script.module.feedparser/lib/feedparser/datetimes/korean.py
+++ b/script.module.feedparser/lib/feedparser/datetimes/korean.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/datetimes/perforce.py b/script.module.feedparser/lib/feedparser/datetimes/perforce.py
index aac23bbdc..e53e5ff67 100644
--- a/script.module.feedparser/lib/feedparser/datetimes/perforce.py
+++ b/script.module.feedparser/lib/feedparser/datetimes/perforce.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/datetimes/rfc822.py b/script.module.feedparser/lib/feedparser/datetimes/rfc822.py
index 15b95ddb9..12e699c84 100644
--- a/script.module.feedparser/lib/feedparser/datetimes/rfc822.py
+++ b/script.module.feedparser/lib/feedparser/datetimes/rfc822.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/datetimes/w3dtf.py b/script.module.feedparser/lib/feedparser/datetimes/w3dtf.py
index 1cadca3c7..9b71af1fa 100644
--- a/script.module.feedparser/lib/feedparser/datetimes/w3dtf.py
+++ b/script.module.feedparser/lib/feedparser/datetimes/w3dtf.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/encodings.py b/script.module.feedparser/lib/feedparser/encodings.py
index 02dfcbe02..5ae74af68 100644
--- a/script.module.feedparser/lib/feedparser/encodings.py
+++ b/script.module.feedparser/lib/feedparser/encodings.py
@@ -1,5 +1,5 @@
 # Character encoding routines
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
@@ -26,9 +26,9 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-import cgi
 import codecs
 import re
+import typing as t
 
 try:
     try:
@@ -68,6 +68,30 @@ def lazy_chardet_encoding(data):
 RE_XML_PI_ENCODING = re.compile(br'^<\?.*encoding=[\'"](.*?)[\'"].*\?>')
 
 
+def parse_content_type(line: str) -> t.Tuple[str, str]:
+    """Parse an HTTP Content-Type header.
+
+    The return value will be a tuple of strings:
+    the MIME type, and the value of the "charset" (if any).
+
+    This is a custom replacement for Python's cgi.parse_header().
+    The cgi module will be removed in Python 3.13.
+    """
+
+    chunks = line.split(";")
+    if not chunks:
+        return "", ""
+
+    mime_type = chunks[0].strip()
+    charset_value = ""
+    for chunk in chunks[1:]:
+        key, _, value = chunk.partition("=")
+        if key.strip().lower() == "charset":
+            charset_value = value.strip().strip("\"'")
+
+    return mime_type, charset_value
+
+
 def convert_to_utf8(http_headers, data, result):
     """Detect and convert the character encoding to UTF-8.
 
@@ -181,10 +205,7 @@ def convert_to_utf8(http_headers, data, result):
     # XML declaration encoding, and HTTP encoding, following the
     # heuristic defined in RFC 3023.
     http_content_type = http_headers.get('content-type') or ''
-    http_content_type, params = cgi.parse_header(http_content_type)
-    http_encoding = params.get('charset', '').replace("'", "")
-    if isinstance(http_encoding, bytes):
-        http_encoding = http_encoding.decode('utf-8', 'ignore')
+    http_content_type, http_encoding = parse_content_type(http_content_type)
 
     acceptable_content_type = 0
     application_content_types = ('application/xml', 'application/xml-dtd',
diff --git a/script.module.feedparser/lib/feedparser/exceptions.py b/script.module.feedparser/lib/feedparser/exceptions.py
index 7fa28a1ba..0da8152ff 100644
--- a/script.module.feedparser/lib/feedparser/exceptions.py
+++ b/script.module.feedparser/lib/feedparser/exceptions.py
@@ -1,5 +1,5 @@
 # Exceptions used throughout feedparser
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/html.py b/script.module.feedparser/lib/feedparser/html.py
index 487ea4825..0aae18f6a 100644
--- a/script.module.feedparser/lib/feedparser/html.py
+++ b/script.module.feedparser/lib/feedparser/html.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/http.py b/script.module.feedparser/lib/feedparser/http.py
index 97d67cbd3..1516eabfd 100644
--- a/script.module.feedparser/lib/feedparser/http.py
+++ b/script.module.feedparser/lib/feedparser/http.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
@@ -53,6 +53,8 @@ def http_error_default(self, req, fp, code, msg, headers):
 
     def http_error_301(self, req, fp, code, msg, hdrs):
         result = urllib.request.HTTPRedirectHandler.http_error_301(self, req, fp, code, msg, hdrs)
+        if not result:
+            return fp
         result.status = code
         result.newurl = result.geturl()
         return result
@@ -78,7 +80,7 @@ def http_error_401(self, req, fp, code, msg, headers):
         host = urllib.parse.urlparse(req.get_full_url())[1]
         if 'Authorization' not in req.headers or 'WWW-Authenticate' not in headers:
             return self.http_error_default(req, fp, code, msg, headers)
-        auth = base64.decodebytes(req.headers['Authorization'].split(' ')[1].encode('utf8'))
+        auth = base64.decodebytes(req.headers['Authorization'].split(' ')[1].encode()).decode()
         user, passw = auth.split(':')
         realm = re.findall('realm="([^"]*)"', headers['WWW-Authenticate'])[0]
         self.add_password(realm, host, user, passw)
@@ -145,12 +147,23 @@ def get(url, etag=None, modified=None, agent=None, referrer=None, handlers=None,
             if url_pieces.port:
                 new_pieces[1] = f'{url_pieces.hostname}:{url_pieces.port}'
             url = urllib.parse.urlunparse(new_pieces)
-            auth = base64.standard_b64encode(f'{url_pieces.username}:{url_pieces.password}').strip()
+            auth = base64.standard_b64encode(f'{url_pieces.username}:{url_pieces.password}'.encode()).decode()
 
     # iri support
     if not isinstance(url, bytes):
         url = convert_to_idn(url)
 
+    # Prevent UnicodeEncodeErrors caused by Unicode characters in the path.
+    bits = []
+    for c in url:
+        try:
+            c.encode('ascii')
+        except UnicodeEncodeError:
+            bits.append(urllib.parse.quote(c))
+        else:
+            bits.append(c)
+    url = ''.join(bits)
+
     # try to open with urllib2 (to use optional headers)
     request = _build_urllib2_request(url, agent, ACCEPT_HEADER, etag, modified, referrer, auth, request_headers)
     opener = urllib.request.build_opener(*tuple(handlers + [_FeedURLHandler()]))
@@ -203,7 +216,7 @@ def get(url, etag=None, modified=None, agent=None, referrer=None, handlers=None,
         result['href'] = f.url.decode('utf-8', 'ignore')
     else:
         result['href'] = f.url
-    result['status'] = getattr(f, 'status', 200)
+    result['status'] = getattr(f, 'status', None) or 200
 
     # Stop processing if the server sent HTTP 304 Not Modified.
     if getattr(f, 'code', 0) == 304:
diff --git a/script.module.feedparser/lib/feedparser/mixin.py b/script.module.feedparser/lib/feedparser/mixin.py
index f305015b9..c4265e750 100644
--- a/script.module.feedparser/lib/feedparser/mixin.py
+++ b/script.module.feedparser/lib/feedparser/mixin.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
@@ -193,6 +193,7 @@ def __init__(self):
         self.svgOK = 0
         self.title_depth = -1
         self.depth = 0
+        self.hasContent = 0
         if self.lang:
             self.feeddata['language'] = self.lang.replace('_', '-')
 
@@ -506,9 +507,7 @@ def pop(self, element, strip_whitespace=1):
         if base64 and self.contentparams.get('base64', 0):
             try:
                 output = base64.decodebytes(output.encode('utf8')).decode('utf8')
-            except binascii.Error:
-                pass
-            except binascii.Incomplete:
+            except (binascii.Error, binascii.Incomplete, UnicodeDecodeError):
                 pass
 
         # resolve relative URIs
diff --git a/script.module.feedparser/lib/feedparser/namespaces/_base.py b/script.module.feedparser/lib/feedparser/namespaces/_base.py
index 61446ffe9..cb2b2a98c 100644
--- a/script.module.feedparser/lib/feedparser/namespaces/_base.py
+++ b/script.module.feedparser/lib/feedparser/namespaces/_base.py
@@ -1,5 +1,5 @@
 # Support for the Atom, RSS, RDF, and CDF feed formats
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
@@ -259,6 +259,7 @@ def _start_item(self, attrs_d):
     def _end_item(self):
         self.pop('item')
         self.inentry = 0
+        self.hasContent = 0
     _end_entry = _end_item
 
     def _start_language(self, attrs_d):
@@ -388,7 +389,7 @@ def _end_title(self):
 
     def _start_description(self, attrs_d):
         context = self._get_context()
-        if 'summary' in context:
+        if 'summary' in context and not self.hasContent:
             self._summaryKey = 'content'
             self._start_content(attrs_d)
         else:
@@ -429,7 +430,7 @@ def _end_generator(self):
 
     def _start_summary(self, attrs_d):
         context = self._get_context()
-        if 'summary' in context:
+        if 'summary' in context and not self.hasContent:
             self._summaryKey = 'content'
             self._start_content(attrs_d)
         else:
@@ -466,6 +467,7 @@ def _end_source(self):
         self.sourcedata.clear()
 
     def _start_content(self, attrs_d):
+        self.hasContent = 1
         self.push_content('content', attrs_d, 'text/plain', 1)
         src = attrs_d.get('src')
         if src:
@@ -477,6 +479,7 @@ def _start_body(self, attrs_d):
     _start_xhtml_body = _start_body
 
     def _start_content_encoded(self, attrs_d):
+        self.hasContent = 1
         self.push_content('content', attrs_d, 'text/html', 1)
     _start_fullitem = _start_content_encoded
 
diff --git a/script.module.feedparser/lib/feedparser/namespaces/admin.py b/script.module.feedparser/lib/feedparser/namespaces/admin.py
index 2dca7a02b..88b70013d 100644
--- a/script.module.feedparser/lib/feedparser/namespaces/admin.py
+++ b/script.module.feedparser/lib/feedparser/namespaces/admin.py
@@ -1,5 +1,5 @@
 # Support for the administrative elements extension
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/namespaces/cc.py b/script.module.feedparser/lib/feedparser/namespaces/cc.py
index da1a4ceee..9e482d1b4 100644
--- a/script.module.feedparser/lib/feedparser/namespaces/cc.py
+++ b/script.module.feedparser/lib/feedparser/namespaces/cc.py
@@ -1,5 +1,5 @@
 # Support for the Creative Commons licensing extensions
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/namespaces/dc.py b/script.module.feedparser/lib/feedparser/namespaces/dc.py
index feabdd0a2..fdf4cc11f 100644
--- a/script.module.feedparser/lib/feedparser/namespaces/dc.py
+++ b/script.module.feedparser/lib/feedparser/namespaces/dc.py
@@ -1,5 +1,5 @@
 # Support for the Dublin Core metadata extensions
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/namespaces/georss.py b/script.module.feedparser/lib/feedparser/namespaces/georss.py
index 8d8b253b3..2f3035068 100644
--- a/script.module.feedparser/lib/feedparser/namespaces/georss.py
+++ b/script.module.feedparser/lib/feedparser/namespaces/georss.py
@@ -1,5 +1,5 @@
 # Support for the GeoRSS format
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
@@ -91,6 +91,8 @@ def _parse_srs_attrs(self, attrs_d):
         except ValueError:
             srs_dimension = 2
         context = self._get_context()
+        if 'where' not in context:
+            context['where'] = {}
         context['where']['srsName'] = srs_name
         context['where']['srsDimension'] = srs_dimension
 
diff --git a/script.module.feedparser/lib/feedparser/namespaces/itunes.py b/script.module.feedparser/lib/feedparser/namespaces/itunes.py
index abcfc243b..7cebfae9a 100644
--- a/script.module.feedparser/lib/feedparser/namespaces/itunes.py
+++ b/script.module.feedparser/lib/feedparser/namespaces/itunes.py
@@ -1,5 +1,5 @@
 # Support for the iTunes format
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/namespaces/mediarss.py b/script.module.feedparser/lib/feedparser/namespaces/mediarss.py
index b63743879..00a07afbc 100644
--- a/script.module.feedparser/lib/feedparser/namespaces/mediarss.py
+++ b/script.module.feedparser/lib/feedparser/namespaces/mediarss.py
@@ -1,5 +1,5 @@
 # Support for the Media RSS format
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/namespaces/psc.py b/script.module.feedparser/lib/feedparser/namespaces/psc.py
index c7f565e04..519bee1d8 100644
--- a/script.module.feedparser/lib/feedparser/namespaces/psc.py
+++ b/script.module.feedparser/lib/feedparser/namespaces/psc.py
@@ -1,5 +1,5 @@
 # Support for the Podlove Simple Chapters format
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/parsers/loose.py b/script.module.feedparser/lib/feedparser/parsers/loose.py
index 52467d0f8..ee0b58b13 100644
--- a/script.module.feedparser/lib/feedparser/parsers/loose.py
+++ b/script.module.feedparser/lib/feedparser/parsers/loose.py
@@ -1,5 +1,5 @@
 # The loose feed parser that interfaces with an SGML parsing library
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/parsers/strict.py b/script.module.feedparser/lib/feedparser/parsers/strict.py
index 23759f938..d40797a7a 100644
--- a/script.module.feedparser/lib/feedparser/parsers/strict.py
+++ b/script.module.feedparser/lib/feedparser/parsers/strict.py
@@ -1,5 +1,5 @@
 # The strict feed parser that interfaces with an XML parsing library
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/sanitizer.py b/script.module.feedparser/lib/feedparser/sanitizer.py
index 308db7c3a..597a72b87 100644
--- a/script.module.feedparser/lib/feedparser/sanitizer.py
+++ b/script.module.feedparser/lib/feedparser/sanitizer.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/sgml.py b/script.module.feedparser/lib/feedparser/sgml.py
index 1509099ba..ae5edf2a2 100644
--- a/script.module.feedparser/lib/feedparser/sgml.py
+++ b/script.module.feedparser/lib/feedparser/sgml.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/urls.py b/script.module.feedparser/lib/feedparser/urls.py
index c27fdd128..1155f26e6 100644
--- a/script.module.feedparser/lib/feedparser/urls.py
+++ b/script.module.feedparser/lib/feedparser/urls.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/lib/feedparser/util.py b/script.module.feedparser/lib/feedparser/util.py
index 5b7313072..5ad3a84a0 100644
--- a/script.module.feedparser/lib/feedparser/util.py
+++ b/script.module.feedparser/lib/feedparser/util.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2020 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2010-2023 Kurt McKee <contactme@kurtmckee.org>
 # Copyright 2002-2008 Mark Pilgrim
 # All rights reserved.
 #
diff --git a/script.module.feedparser/icon.png b/script.module.feedparser/resources/icon.png
similarity index 100%
rename from script.module.feedparser/icon.png
rename to script.module.feedparser/resources/icon.png