Compose relative URLs in RSS feeds correctly
If the relative link from the (page generating the) RSS to the target would start with "./" or "../", just concatenating it with the URL to the directory containing the RSS is not sufficient. Go via URI::new_abs to fix this.master
parent
816c856a46
commit
7aca0d40a3
|
@ -613,7 +613,7 @@ sub absolute_urls ($$) {
|
||||||
$v=$baseurl.$v; # anchor
|
$v=$baseurl.$v; # anchor
|
||||||
}
|
}
|
||||||
elsif ($dv=~/^(?!\w+:)[^\/]/) {
|
elsif ($dv=~/^(?!\w+:)[^\/]/) {
|
||||||
$v=$url.$v; # relative url
|
$v=URI->new_abs($v, $url)->canonical; # relative url
|
||||||
}
|
}
|
||||||
elsif ($dv=~/^\//) {
|
elsif ($dv=~/^\//) {
|
||||||
if (! defined $urltop) {
|
if (! defined $urltop) {
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
RSS output contains relative links. Ie.
|
RSS output contains relative links. Ie.
|
||||||
http://kitenet.net/~joey/blog/index.rss contains a link to
|
http://kitenet.net/~joey/blog/index.rss contains a link to
|
||||||
http://kitenet.net/~joey/blog/../blog.html
|
http://kitenet.net/~joey/blog/../blog.html
|
||||||
|
|
||||||
|
> Finally [[done]] for the first release of 2016. --[[smcv]]
|
||||||
|
|
20
t/inline.t
20
t/inline.t
|
@ -46,6 +46,9 @@ write_old_file("antagonists.mdwn",
|
||||||
# using old spelling of "limit" ("show") to verify backwards compat
|
# using old spelling of "limit" ("show") to verify backwards compat
|
||||||
write_old_file("enemies.mdwn",
|
write_old_file("enemies.mdwn",
|
||||||
'[[!inline pages="enemies/*" postform=no rootpage=enemies sort=title reverse=yes show=2]]');
|
'[[!inline pages="enemies/*" postform=no rootpage=enemies sort=title reverse=yes show=2]]');
|
||||||
|
# to test correct processing of ../
|
||||||
|
write_old_file("blah/blah/enemies.mdwn",
|
||||||
|
'[[!inline pages="enemies/*" postform=no rootpage=enemies sort=title reverse=yes show=2]]');
|
||||||
foreach my $page (qw(protagonists/shepard protagonists/link
|
foreach my $page (qw(protagonists/shepard protagonists/link
|
||||||
antagonists/saren antagonists/ganondorf
|
antagonists/saren antagonists/ganondorf
|
||||||
friends/garrus friends/liara friends/midna friends/telma
|
friends/garrus friends/liara friends/midna friends/telma
|
||||||
|
@ -53,6 +56,9 @@ foreach my $page (qw(protagonists/shepard protagonists/link
|
||||||
enemies/zant)) {
|
enemies/zant)) {
|
||||||
write_old_file("$page.mdwn", "this page is {$page}");
|
write_old_file("$page.mdwn", "this page is {$page}");
|
||||||
}
|
}
|
||||||
|
# test cross-linking between pages as rendered in RSS
|
||||||
|
write_old_file("enemies/zant.mdwn", "this page is {enemies/zant}\n\n".
|
||||||
|
"Zant hates [[friends/Midna]].");
|
||||||
|
|
||||||
ok(! system(@command));
|
ok(! system(@command));
|
||||||
ok(! system(@command, "--refresh"));
|
ok(! system(@command, "--refresh"));
|
||||||
|
@ -81,4 +87,18 @@ like($blob, qr[this page is \{enemies/zant}.*this page is \{enemies/rachni}]s,
|
||||||
unlike($blob, qr{enemies/(?:benezia|geth)},
|
unlike($blob, qr{enemies/(?:benezia|geth)},
|
||||||
'pages excluded by show should not be present');
|
'pages excluded by show should not be present');
|
||||||
|
|
||||||
|
$blob = readfile("t/tmp/out/enemies.rss");
|
||||||
|
like($blob, qr[this page is \{enemies/zant}.*this page is \{enemies/rachni}]s,
|
||||||
|
'first two pages in reversed sort order are present');
|
||||||
|
like($blob,
|
||||||
|
qr[Zant hates <a href=(?:['"]|")http://example\.com/friends/midna.html(?:['"]|")>Midna</a>]s,
|
||||||
|
'link is correctly relative');
|
||||||
|
|
||||||
|
$blob = readfile("t/tmp/out/blah/blah/enemies.rss");
|
||||||
|
like($blob, qr[this page is \{enemies/zant}.*this page is \{enemies/rachni}]s,
|
||||||
|
'first two pages in reversed sort order are present');
|
||||||
|
like($blob,
|
||||||
|
qr[Zant hates <a href=(?:['"]|")http://example\.com/friends/midna.html(?:['"]|")>Midna</a>]s,
|
||||||
|
'link is correctly relative');
|
||||||
|
|
||||||
done_testing;
|
done_testing;
|
||||||
|
|
Loading…
Reference in New Issue