1
0
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:
Steven Schubiger 2009-08-29 23:24:49 +02:00
parent 4198c7239f
commit b4dca1816f
5 changed files with 108 additions and 4 deletions

View File

@ -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

View File

@ -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)
{ {

View File

@ -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
View 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

View File

@ -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',