Fix relative links in postprocessed images (#16334)
If a pre-post-processed file contains relative img tags these need to be updated and joined correctly with the prefix. Finally, the node attributes need to be updated. Fix #16308 Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: 6543 <6543@obermui.de>
This commit is contained in:
		
							parent
							
								
									fae07cbc8f
								
							
						
					
					
						commit
						32fd11395b
					
				| @ -364,7 +364,7 @@ func visitNode(ctx *RenderContext, procs []processor, node *html.Node, visitText | ||||
| 		} | ||||
| 	case html.ElementNode: | ||||
| 		if node.Data == "img" { | ||||
| 			for _, attr := range node.Attr { | ||||
| 			for i, attr := range node.Attr { | ||||
| 				if attr.Key != "src" { | ||||
| 					continue | ||||
| 				} | ||||
| @ -377,6 +377,7 @@ func visitNode(ctx *RenderContext, procs []processor, node *html.Node, visitText | ||||
| 
 | ||||
| 					attr.Val = util.URLJoin(prefix, attr.Val) | ||||
| 				} | ||||
| 				node.Attr[i] = attr | ||||
| 			} | ||||
| 		} else if node.Data == "a" { | ||||
| 			visitText = false | ||||
|  | ||||
| @ -425,6 +425,41 @@ func TestRender_ShortLinks(t *testing.T) { | ||||
| 		`<p><a href="https://example.org" rel="nofollow">[[foobar]]</a></p>`) | ||||
| } | ||||
| 
 | ||||
| func TestRender_RelativeImages(t *testing.T) { | ||||
| 	setting.AppURL = AppURL | ||||
| 	setting.AppSubURL = AppSubURL | ||||
| 	tree := util.URLJoin(AppSubURL, "src", "master") | ||||
| 
 | ||||
| 	test := func(input, expected, expectedWiki string) { | ||||
| 		buffer, err := markdown.RenderString(&RenderContext{ | ||||
| 			URLPrefix: tree, | ||||
| 			Metas:     localMetas, | ||||
| 		}, input) | ||||
| 		assert.NoError(t, err) | ||||
| 		assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer)) | ||||
| 		buffer, err = markdown.RenderString(&RenderContext{ | ||||
| 			URLPrefix: setting.AppSubURL, | ||||
| 			Metas:     localMetas, | ||||
| 			IsWiki:    true, | ||||
| 		}, input) | ||||
| 		assert.NoError(t, err) | ||||
| 		assert.Equal(t, strings.TrimSpace(expectedWiki), strings.TrimSpace(buffer)) | ||||
| 	} | ||||
| 
 | ||||
| 	rawwiki := util.URLJoin(AppSubURL, "wiki", "raw") | ||||
| 	mediatree := util.URLJoin(AppSubURL, "media", "master") | ||||
| 
 | ||||
| 	test( | ||||
| 		`<img src="Link">`, | ||||
| 		`<img src="`+util.URLJoin(mediatree, "Link")+`"/>`, | ||||
| 		`<img src="`+util.URLJoin(rawwiki, "Link")+`"/>`) | ||||
| 
 | ||||
| 	test( | ||||
| 		`<img src="./icon.png">`, | ||||
| 		`<img src="`+util.URLJoin(mediatree, "icon.png")+`"/>`, | ||||
| 		`<img src="`+util.URLJoin(rawwiki, "icon.png")+`"/>`) | ||||
| } | ||||
| 
 | ||||
| func Test_ParseClusterFuzz(t *testing.T) { | ||||
| 	setting.AppURL = AppURL | ||||
| 	setting.AppSubURL = AppSubURL | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user