From cb7940e2deacba66f2510816732be654b255cc70 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Tue, 14 Aug 2018 12:26:51 +0200 Subject: [PATCH] Fix hashtags with markdown escape enabled They're now transformed to markdown syntax links before processing them through Parsedown. Fixes #1210 --- plugins/markdown/markdown.php | 9 +++++++++ tests/plugins/PluginMarkdownTest.php | 14 +++++++++++++- tests/plugins/resources/hashtags.md | 10 ++++++++++ tests/plugins/resources/hashtags.raw | 10 ++++++++++ tests/plugins/resources/markdown.html | 8 ++++---- tests/plugins/resources/markdown.md | 2 +- 6 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 tests/plugins/resources/hashtags.md create mode 100644 tests/plugins/resources/hashtags.raw diff --git a/plugins/markdown/markdown.php b/plugins/markdown/markdown.php index 821bb125..21972814 100644 --- a/plugins/markdown/markdown.php +++ b/plugins/markdown/markdown.php @@ -215,6 +215,15 @@ function reverse_text2clickable($description) $descriptionLine ); + // Make hashtag links markdown ready, otherwise the links will be ignored with escape set to true + if (!$codeBlockOn && !$codeLineOn) { + $descriptionLine = preg_replace( + '#([^<]+)#m', + '[$2]($1)', + $descriptionLine + ); + } + $descriptionOut .= $descriptionLine; if ($lineCount++ < count($descriptionLines) - 1) { $descriptionOut .= PHP_EOL; diff --git a/tests/plugins/PluginMarkdownTest.php b/tests/plugins/PluginMarkdownTest.php index b31e817f..319a94ba 100644 --- a/tests/plugins/PluginMarkdownTest.php +++ b/tests/plugins/PluginMarkdownTest.php @@ -106,6 +106,18 @@ class PluginMarkdownTest extends PHPUnit_Framework_TestCase $this->assertEquals($text, $reversedText); } + /** + * Test reverse_text2clickable(). + */ + public function testReverseText2clickableHashtags() + { + $text = file_get_contents('tests/plugins/resources/hashtags.raw'); + $md = file_get_contents('tests/plugins/resources/hashtags.md'); + $clickableText = hashtag_autolink($text); + $reversedText = reverse_text2clickable($clickableText); + $this->assertEquals($md, $reversedText); + } + /** * Test reverse_nl2br(). */ @@ -246,7 +258,7 @@ class PluginMarkdownTest extends PHPUnit_Framework_TestCase $this->conf->get('security.markdown_escape', true), $this->conf->get('security.allowed_protocols') ); - $this->assertEquals($html, $data); + $this->assertEquals($html, $data . PHP_EOL); } /** diff --git a/tests/plugins/resources/hashtags.md b/tests/plugins/resources/hashtags.md new file mode 100644 index 00000000..46326de3 --- /dev/null +++ b/tests/plugins/resources/hashtags.md @@ -0,0 +1,10 @@ +[#lol](?addtag=lol) + + #test + +`#test2` + +``` +bla #bli blo +#bla +``` diff --git a/tests/plugins/resources/hashtags.raw b/tests/plugins/resources/hashtags.raw new file mode 100644 index 00000000..9d2dc98a --- /dev/null +++ b/tests/plugins/resources/hashtags.raw @@ -0,0 +1,10 @@ +#lol + + #test + +`#test2` + +``` +bla #bli blo +#bla +``` diff --git a/tests/plugins/resources/markdown.html b/tests/plugins/resources/markdown.html index f1df4e7e..c3460bf7 100644 --- a/tests/plugins/resources/markdown.html +++ b/tests/plugins/resources/markdown.html @@ -12,11 +12,11 @@
  • two
  • three
  • four
  • -
  • foo <a href="?addtag=foobar" title="Hashtag foobar">#foobar</a>
  • +
  • foo #foobar
  • -

    <a href="?addtag=foobar" title="Hashtag foobar">#foobar</a> foo lol #foo <a href="?addtag=bar" title="Hashtag bar">#bar</a>

    -

    fsdfs http://link.tld <a href="?addtag=foobar" title="Hashtag foobar">#foobar</a> http://link.tld

    +

    #foobar foo lol #foo #bar

    +

    fsdfs http://link.tld #foobar http://link.tld

    http://link.tld #foobar
     next #foo

    Block:

    @@ -30,4 +30,4 @@ next #foo link
    link
    link
    -link

    \ No newline at end of file +link

    diff --git a/tests/plugins/resources/markdown.md b/tests/plugins/resources/markdown.md index b8ebd934..9350a8c7 100644 --- a/tests/plugins/resources/markdown.md +++ b/tests/plugins/resources/markdown.md @@ -31,4 +31,4 @@ lorem ipsum #foobar http://link.tld [link](ftp://test.tld/path/?query=value#hash) [link](magnet:test.tld/path/?query=value#hash) [link](javascript:alert('xss')) -[link](other://test.tld/path/?query=value#hash) \ No newline at end of file +[link](other://test.tld/path/?query=value#hash) -- 2.41.0