+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>
* wget.h (uerr_t): added new VERIFCERTERR code for SSL certificate
/* Conversion of links to local files.
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.
"index.html?foo=bar.html" to "index.html%3Ffoo=bar.html" should be
safe for both local and HTTP-served browsing.
- We always quote "#" as "%23" and "%" as "%25" because those
- characters have special meanings in URLs. */
+ We always quote "#" as "%23", "%" as "%25" and ";" as "%3B"
+ because those characters have special meanings in URLs. */
static char *
local_quote_string (const char *file)
const char *from;
char *newname, *to;
- char *any = strpbrk (file, "?#%");
+ char *any = strpbrk (file, "?#%;");
if (!any)
return html_quote_string (file);
*to++ = '2';
*to++ = '3';
break;
+ case ';':
+ *to++ = '%';
+ *to++ = '3';
+ *to++ = 'B';
+ break;
case '?':
if (opt.adjust_extension)
{
+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>
* WgetTest.pm.in (run): Shift the errcode right by 8 binary places.
--- /dev/null
+#!/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
+
'Test-iri-disabled.px',
'Test-iri-forced-remote.px',
'Test-iri-list.px',
+ 'Test-k.px',
'Test-meta-robots.px',
'Test-N-current.px',
'Test-N-smaller.px',