Skip to content

safe_mode='escape' problems #647

@justanotheranonymoususer

Description

I tried to use safe_mode and saw some unexpected behavior. Below are the problems I encountered. I didn't want to spam the issues, but let me know if you prefer an issue per item.

Version: 9a88ce1

import markdown2

# <code> tags are escaped inside links.
# Expected: <p><a href="https://example.com"><code>example.com</code></a></p>
# Actual:   <p><a href="https://example.com">&lt;code>example.com&lt;/code></a></p>
markdown_text = R"[`example.com`](https://example.com)"
print(markdown2.markdown(markdown_text, safe_mode='escape'))

# No handling of escaped HTML characters.
# Expected: <p>&lt;abc&gt;&amp;amp;</p>
# Actual:   <p>\&lt;abc\&gt;\&amp;</p>
markdown_text = R"\<abc\>\&amp;"
print(markdown2.markdown(markdown_text, safe_mode='escape'))

# Excessive escaping in inline code.
# Expected: <p>Path: <code>C:\&lt;folder 1&gt;</code></p>
# Actual:   <p>Path: <code>C:\&amp;lt;folder 1&gt;</code></p>
markdown_text = R"Path: `C:\<folder 1>`"
print(markdown2.markdown(markdown_text, safe_mode='escape'))

# Fenced code blocks joined to list.
#
# Expected:
# <ul>
# <li>Item 1</li>
# <li>Item 2</li>
# </ul>
#
# <pre><code>// Some code
# </code></pre>
#
# Actual:
# <ul>
# <li>Item 1</li>
# <li>Item 2
# <pre><code>// Some code
# </code></pre></li>
# </ul>
markdown_text = R"""
* Item 1
* Item 2

```
// Some code
```
"""
print(markdown2.markdown(markdown_text, safe_mode='escape',
                         extras={'fenced-code-blocks': None}))

# Asterisks not turned to html.
# Expected: <p>&lt;<em>test</em>&gt;</p>
# Actual:   <p>&lt;*test*&gt;</p>
markdown_text = R"<*test*>"
print(markdown2.markdown(markdown_text, safe_mode='escape'))

# Closing HTML tags not escaped.
# Expected: <h1>&lt;some text&gt;</h1>
# Actual:   <h1>&lt;some text></h1>
markdown_text = R"# <some text>"
print(markdown2.markdown(markdown_text, safe_mode='escape'))

# Escaped backslashes not handled.
#
# Expected:
# <p>a\b
# &lt;x&gt;\&lt;y&gt;</p>
#
# Actual:
# <p>a\b
# &lt;x&gt;\\&lt;y&gt;</p>
markdown_text = R"""
a\\b
<x>\\<y>
"""
print(markdown2.markdown(markdown_text, safe_mode='escape'))

# HTML comments are escaped, should be removed or left alone.
# Expected: <p>test  test2</p>
# Actual:   <p>test &lt;!-- comment --&gt; test2</p>
markdown_text = R"test <!-- comment --> test2"
print(markdown2.markdown(markdown_text, safe_mode='escape'))

# Closing quotes aren't escaped.
# Expected: <p>test&gt;</p>
# Actual:   <p>test></p>
markdown_text = R"test>"
print(markdown2.markdown(markdown_text, safe_mode='escape'))

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions