BBCode `url` 标签在包装文本以主机后的组件结尾的 URL 时会中断

Priority/Severity:

Platform

操作系统 浏览器
Windows 11 Google Chrome 112.0.5615.138
Ubuntu 22.04 Google Chrome 112.0.5615.49
macOS Ventura Google Chrome 112.0.5615.137

(所有桌面端)

Description:

在以下条件下,帖子中的 BBCode url 标签未能正确渲染:

  • 标签包裹的文本以 URL 结尾
  • 该 URL 具有主机组件之后的组件(即 路径查询 和/或 片段

Reproducible steps:

发表一个包含以下标记的帖子:

[url]http://example.com/[/url]

:bug: 标记未按预期渲染:

image

Expected behavior:

标记应渲染为:

image

Additional context

我能够在 try.discourse.org 的“安全模式”中重现此故障。


以下是处理以 URL 路径结尾的文本的其他示例:

Markup:

[url]http://example.com/foo[/url]
[url]http://example.com/foo/[/url]
[url=http://example.com/]http://example.com/[/url]
[url=http://example.com/]foo http://example.com/[/url]

Rendered:


最初报告于 Old url markup not migrated to new forum - Website and Forum - Arduino Forum

我们有许多帖子是在此标记能够正确渲染时编写的(在迁移到 Discourse 之前,使用的是 SMF 框架)。

3 个赞

我已经确认这是一个核心 bug,我们希望在未来几周内修复。

具体来说:

[url]http://example.com[/url] 可以正常工作,但是:[url]http://example.com/example[/url] 除非添加尾随空格 [url]http://example.com/example [/url] 否则无法正常工作。

我开始逐步调试,看起来是某些东西绊倒了我们的解析器,可能是转义规则。我们会解决这个问题,感谢你提出。

5 个赞

我对这段代码不太熟悉,但快速看了一下。我认为这与自动链接系统有关。当解析器寻找关闭的 URL 标签 [/url] 时,它已经被包含在一个自动链接中。

例如,请注意这里的自动链接指向 http://example.com/foo%5B/url%5D

http://example.com/foo

这就是为什么添加空格有帮助——它阻止了自动链接包含 [/url]

:thinking:

6 个赞

已根据以下内容修复:

欢迎审阅/合并……这是一个相当复杂的修复,@per1234,因为我们支持诸如

[url][b]www.site.com[/b][/url] 之类的疯狂内容。

5 个赞

这都已修复 :confetti_ball:

[url]http://example.com/foo[/url]
[url]http://example.com/foo/[/url]
[url=http://example.com/]http://example.com/[/url]
[url=http://example.com/]foo http://example.com/[/url]

http://example.com/foo
http://example.com/foo/
http://example.com/
foo http://example.com/

@per1234 您应该已经部署了修复程序,如果一切正常,请告知我们!

感谢您的报告!

1 个赞

非常感谢 sam 如此迅速地解决了问题!

3 个赞

此主题已在 5 天后自动关闭。不再允许回复。