mendhak / waveshare-epaper-display

At-a-glance dashboard for Raspberry Pi with a Waveshare ePaper 7.5 Inch HAT. Date/Time, Weather, Alerts, Google/Outlook Calendar
https://code.mendhak.com/raspberrypi-epaper-dashboard/
438 stars 65 forks source link

Ampersand `&` in calendar entry causes malformed SVG and prevents successful display #39

Closed mendhak closed 1 year ago

mendhak commented 1 year ago

I put B&Q in a calendar entry and it caused

Traceback (most recent call last):
  File "/usr/lib/python3.9/xml/etree/ElementTree.py", line 1720, in feed
    self.parser.Parse(data, False)
xml.parsers.expat.ExpatError: not well-formed (invalid token): line 38, column 60

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/cairosvg", line 33, in <module>
    sys.exit(load_entry_point('CairoSVG==2.5.0', 'console_scripts', 'cairosvg')())
  File "/usr/lib/python3/dist-packages/cairosvg/__main__.py", line 78, in main
    SURFACES[output_format.upper()].convert(**kwargs)
  File "/usr/lib/python3/dist-packages/cairosvg/surface.py", line 127, in convert
    tree = Tree(
  File "/usr/lib/python3/dist-packages/cairosvg/parser.py", line 390, in __init__
    tree = ElementTree.fromstring(
  File "/usr/lib/python3/dist-packages/defusedxml/common.py", line 131, in fromstring
    parser.feed(text)
  File "/usr/lib/python3.9/xml/etree/ElementTree.py", line 1722, in feed
    self._raiseerror(v)
  File "/usr/lib/python3.9/xml/etree/ElementTree.py", line 1629, in _raiseerror
    raise err
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 38, column 60

I'll need to either escape all & or use a CDATA where text is displayed from external sources.
This might also extend to weather descriptions.