From 03df2a9a993b5b2d959f75ceb22d88a67eab8da1 Mon Sep 17 00:00:00 2001 From: szznax Date: Fri, 2 Oct 2009 01:39:44 +0000 Subject: [PATCH] As part of fix for [HER-1671] WARCWriterProcessor error when writing problematic (illegal control character?) outlink - percent encode control-characters in 'userinfo' part of URI as we do for uriPath and uriQuery, so we don't raise exception when adding outlinks to metadata record * UURIFactory.java ensureMinimalEscaping() on 'userinfo' in UURIFactory.fixupAuthority() --- commons/src/main/java/org/archive/net/UURIFactory.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/commons/src/main/java/org/archive/net/UURIFactory.java b/commons/src/main/java/org/archive/net/UURIFactory.java index f7021a12..ba2a6196 100644 --- a/commons/src/main/java/org/archive/net/UURIFactory.java +++ b/commons/src/main/java/org/archive/net/UURIFactory.java @@ -466,7 +466,7 @@ public class UURIFactory extends URI { // fixup authority portion: lowercase/IDN-punycode any domain; // remove stray trailing spaces - uriAuthority = fixupAuthority(uriAuthority); + uriAuthority = fixupAuthority(uriAuthority,charset); // Do some checks if absolute path. if (uriSchemeSpecificPart != null && @@ -586,7 +586,7 @@ public class UURIFactory extends URI { * @return fixed version * @throws URIException */ - private String fixupAuthority(String uriAuthority) throws URIException { + private String fixupAuthority(String uriAuthority, String charset) throws URIException { // Lowercase the host part of the uriAuthority; don't destroy any // userinfo capitalizations. Make sure no illegal characters in // domainlabel substring of the uri authority. @@ -612,12 +612,12 @@ public class UURIFactory extends URI { return domain + port; } else if (atIndex>-1 && portColonIndex<0) { // uncommon: userinfo, no port - String userinfo = uriAuthority.substring(0,atIndex+1); + String userinfo = ensureMinimalEscaping(uriAuthority.substring(0,atIndex+1),charset); String domain = fixupDomainlabel(uriAuthority.substring(atIndex+1)); return userinfo + domain; } else { // uncommon: userinfo, port - String userinfo = uriAuthority.substring(0,atIndex+1); + String userinfo = ensureMinimalEscaping(uriAuthority.substring(0,atIndex+1),charset); String domain = fixupDomainlabel(uriAuthority.substring(atIndex+1,portColonIndex)); String port = uriAuthority.substring(portColonIndex); return userinfo + domain + port;