mirror of
https://github.com/moparisthebest/wget
synced 2024-07-03 16:38:41 -04:00
Escape semicolons when converting links (#27272).
This commit is contained in:
parent
4198c7239f
commit
b4dca1816f
@ -1,3 +1,8 @@
|
|||||||
|
2009-08-29 Steven Schubiger <stsc@member.fsf.org>
|
||||||
|
|
||||||
|
* convert.c (local_quote_string): Percent-encode semicolons
|
||||||
|
in local file strings.
|
||||||
|
|
||||||
2009-08-27 Micah Cowan <micah@cowan.name>
|
2009-08-27 Micah Cowan <micah@cowan.name>
|
||||||
|
|
||||||
* wget.h (uerr_t): added new VERIFCERTERR code for SSL certificate
|
* wget.h (uerr_t): added new VERIFCERTERR code for SSL certificate
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* Conversion of links to local files.
|
/* Conversion of links to local files.
|
||||||
Copyright (C) 2003, 2004, 2005, 2006, 2007,
|
Copyright (C) 2003, 2004, 2005, 2006, 2007,
|
||||||
2008 Free Software Foundation, Inc.
|
2008, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GNU Wget.
|
This file is part of GNU Wget.
|
||||||
|
|
||||||
@ -598,8 +598,8 @@ find_fragment (const char *beg, int size, const char **bp, const char **ep)
|
|||||||
"index.html?foo=bar.html" to "index.html%3Ffoo=bar.html" should be
|
"index.html?foo=bar.html" to "index.html%3Ffoo=bar.html" should be
|
||||||
safe for both local and HTTP-served browsing.
|
safe for both local and HTTP-served browsing.
|
||||||
|
|
||||||
We always quote "#" as "%23" and "%" as "%25" because those
|
We always quote "#" as "%23", "%" as "%25" and ";" as "%3B"
|
||||||
characters have special meanings in URLs. */
|
because those characters have special meanings in URLs. */
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
local_quote_string (const char *file)
|
local_quote_string (const char *file)
|
||||||
@ -607,7 +607,7 @@ local_quote_string (const char *file)
|
|||||||
const char *from;
|
const char *from;
|
||||||
char *newname, *to;
|
char *newname, *to;
|
||||||
|
|
||||||
char *any = strpbrk (file, "?#%");
|
char *any = strpbrk (file, "?#%;");
|
||||||
if (!any)
|
if (!any)
|
||||||
return html_quote_string (file);
|
return html_quote_string (file);
|
||||||
|
|
||||||
@ -627,6 +627,11 @@ local_quote_string (const char *file)
|
|||||||
*to++ = '2';
|
*to++ = '2';
|
||||||
*to++ = '3';
|
*to++ = '3';
|
||||||
break;
|
break;
|
||||||
|
case ';':
|
||||||
|
*to++ = '%';
|
||||||
|
*to++ = '3';
|
||||||
|
*to++ = 'B';
|
||||||
|
break;
|
||||||
case '?':
|
case '?':
|
||||||
if (opt.adjust_extension)
|
if (opt.adjust_extension)
|
||||||
{
|
{
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
2009-08-29 Steven Schubiger <stsc@member.fsf.org>
|
||||||
|
|
||||||
|
* run-px: Add Test-k.px to the list.
|
||||||
|
|
||||||
|
* Test-k.px: Test escaping of semicolons in local file strings.
|
||||||
|
|
||||||
2009-08-27 Micah Cowan <micah@cowan.name>
|
2009-08-27 Micah Cowan <micah@cowan.name>
|
||||||
|
|
||||||
* WgetTest.pm.in (run): Shift the errcode right by 8 binary places.
|
* WgetTest.pm.in (run): Shift the errcode right by 8 binary places.
|
||||||
|
87
tests/Test-k.px
Executable file
87
tests/Test-k.px
Executable file
@ -0,0 +1,87 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use HTTPTest;
|
||||||
|
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
my $index = <<EOF;
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Index</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<a href="site;sub:.html">Site</a>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
EOF
|
||||||
|
|
||||||
|
my $converted = <<EOF;
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Index</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<a href="site%3Bsub:.html">Site</a>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
EOF
|
||||||
|
|
||||||
|
my $site = <<EOF;
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Site</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Subsite
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# code, msg, headers, content
|
||||||
|
my %urls = (
|
||||||
|
'/index.html' => {
|
||||||
|
code => "200",
|
||||||
|
msg => "Ok",
|
||||||
|
headers => {
|
||||||
|
"Content-type" => "text/html",
|
||||||
|
},
|
||||||
|
content => $index,
|
||||||
|
},
|
||||||
|
'/site;sub:.html' => {
|
||||||
|
code => "200",
|
||||||
|
msg => "Ok",
|
||||||
|
headers => {
|
||||||
|
"Content-type" => "text/html",
|
||||||
|
},
|
||||||
|
content => $site,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
my $cmdline = $WgetTest::WGETPATH . " -k -r -nH http://localhost:{{port}}/index.html";
|
||||||
|
|
||||||
|
my $expected_error_code = 0;
|
||||||
|
|
||||||
|
my %expected_downloaded_files = (
|
||||||
|
'index.html' => {
|
||||||
|
content => $converted,
|
||||||
|
},
|
||||||
|
'site;sub:.html' => {
|
||||||
|
content => $site,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
my $the_test = HTTPTest->new (name => "Test-k",
|
||||||
|
input => \%urls,
|
||||||
|
cmdline => $cmdline,
|
||||||
|
errcode => $expected_error_code,
|
||||||
|
output => \%expected_downloaded_files);
|
||||||
|
exit $the_test->run();
|
||||||
|
|
||||||
|
# vim: et ts=4 sw=4
|
||||||
|
|
@ -43,6 +43,7 @@ my @tests = (
|
|||||||
'Test-iri-disabled.px',
|
'Test-iri-disabled.px',
|
||||||
'Test-iri-forced-remote.px',
|
'Test-iri-forced-remote.px',
|
||||||
'Test-iri-list.px',
|
'Test-iri-list.px',
|
||||||
|
'Test-k.px',
|
||||||
'Test-meta-robots.px',
|
'Test-meta-robots.px',
|
||||||
'Test-N-current.px',
|
'Test-N-current.px',
|
||||||
'Test-N-smaller.px',
|
'Test-N-smaller.px',
|
||||||
|
Loading…
Reference in New Issue
Block a user