diff --git a/plugin/hover.py b/plugin/hover.py
index 07a677cb2..c3bbb462a 100644
--- a/plugin/hover.py
+++ b/plugin/hover.py
@@ -38,6 +38,7 @@
from .session_view import HOVER_HIGHLIGHT_KEY
from urllib.parse import unquote, urlparse
import functools
+import html
import re
import sublime
import webbrowser
@@ -224,7 +225,7 @@ def _on_all_document_links_resolved(
title = link.get("tooltip") or "Follow link"
if title != "Follow link":
link_has_standard_tooltip = False
- contents.append('{}'.format(target, title))
+ contents.append('{}'.format(html.escape(target), html.escape(title)))
if len(contents) > 1:
link_has_standard_tooltip = False
link_range = range_to_region(Range.from_lsp(links[0]["range"]), self.view) if links else None
diff --git a/plugin/inlay_hint.py b/plugin/inlay_hint.py
index 17505da09..0efd0c6b5 100644
--- a/plugin/inlay_hint.py
+++ b/plugin/inlay_hint.py
@@ -101,9 +101,9 @@ def get_inlay_hint_html(view: sublime.View, inlay_hint: InlayHint, session: Sess
def format_inlay_hint_tooltip(tooltip: Optional[Union[str, MarkupContent]]) -> str:
if isinstance(tooltip, str):
- return tooltip
+ return html.escape(tooltip)
if isinstance(tooltip, dict): # MarkupContent
- return tooltip.get('value') or ""
+ return html.escape(tooltip.get('value') or "")
return ""