From 1ddcaedb88bc9ea829df8df6b254c73615c70031 Mon Sep 17 00:00:00 2001
From: Giteabot
Date: Sat, 27 Jan 2024 23:14:36 +0800
Subject: [PATCH] Strip `/` from relative links (#28932) (#28952)
Backport #28932 by @KN4CK3R
Fixes #28915
Restores the old behaviour:
https://github.com/go-gitea/gitea/pull/26745/files#diff-d78a9d361b1fddc12218e4dd42f42d39d6be1fda184041e06bb6fb30f0d94c59L96
Co-authored-by: KN4CK3R
---
modules/markup/markdown/goldmark.go | 10 +++++----
modules/markup/markdown/markdown_test.go | 26 ++++++++++++++++++++++++
2 files changed, 32 insertions(+), 4 deletions(-)
diff --git a/modules/markup/markdown/goldmark.go b/modules/markup/markdown/goldmark.go
index 1db3cbad7e..3dc5530e00 100644
--- a/modules/markup/markdown/goldmark.go
+++ b/modules/markup/markdown/goldmark.go
@@ -85,9 +85,11 @@ func (g *ASTTransformer) Transform(node *ast.Document, reader text.Reader, pc pa
// 2. If they're not wrapped with a link they need a link wrapper
// Check if the destination is a real link
- link := v.Destination
- if len(link) > 0 && !markup.IsLink(link) {
- v.Destination = []byte(giteautil.URLJoin(ctx.Links.ResolveMediaLink(ctx.IsWiki), string(link)))
+ if len(v.Destination) > 0 && !markup.IsLink(v.Destination) {
+ v.Destination = []byte(giteautil.URLJoin(
+ ctx.Links.ResolveMediaLink(ctx.IsWiki),
+ strings.TrimLeft(string(v.Destination), "/"),
+ ))
}
parent := n.Parent()
@@ -103,7 +105,7 @@ func (g *ASTTransformer) Transform(node *ast.Document, reader text.Reader, pc pa
// Duplicate the current image node
image := ast.NewImage(ast.NewLink())
- image.Destination = link
+ image.Destination = v.Destination
image.Title = v.Title
for _, attr := range v.Attributes() {
image.SetAttribute(attr.Name, attr.Value)
diff --git a/modules/markup/markdown/markdown_test.go b/modules/markup/markdown/markdown_test.go
index 5216d1973c..ee3ec0fda5 100644
--- a/modules/markup/markdown/markdown_test.go
+++ b/modules/markup/markdown/markdown_test.go
@@ -580,6 +580,8 @@ https://example.com/file.bin
[[local link|file.bin]]
[[remote link|https://example.com]]

+
+

[[local image|image.jpg]]
[[remote link|https://example.com/image.jpg]]
@@ -609,6 +611,8 @@ mail@domain.com
local link
remote link

+
+



@@ -634,6 +638,8 @@ space
local link
remote link

+
+



@@ -661,6 +667,8 @@ space
local link
remote link

+
+



@@ -688,6 +696,8 @@ space
local link
remote link

+
+



@@ -715,6 +725,8 @@ space
local link
remote link

+
+



@@ -742,6 +754,8 @@ space
local link
remote link

+
+



@@ -770,6 +784,8 @@ space
local link
remote link

+
+



@@ -798,6 +814,8 @@ space
local link
remote link

+
+



@@ -826,6 +844,8 @@ space
local link
remote link

+
+



@@ -854,6 +874,8 @@ space
local link
remote link

+
+



@@ -883,6 +905,8 @@ space
local link
remote link

+
+



@@ -912,6 +936,8 @@ space
local link
remote link

+
+


