You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2013/08/07 23:25:45 UTC
svn commit: r1511503 - in /jmeter/trunk:
src/protocol/http/org/apache/jmeter/protocol/http/proxy/HttpRequestHdr.java
src/protocol/http/org/apache/jmeter/protocol/http/util/ConversionUtils.java
xdocs/changes.xml
Author: pmouawad
Date: Wed Aug 7 21:25:45 2013
New Revision: 1511503
URL: http://svn.apache.org/r1511503
Log:
Bug 54142 - HTTP Proxy Server throws an exception when path contains "|" character
Integrated my patch with a slight change to make current behaviour with Java Impl remain the same as bug only affects HC impls
Bugzilla Id: 54142
Modified:
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/HttpRequestHdr.java
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/util/ConversionUtils.java
jmeter/trunk/xdocs/changes.xml
Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/HttpRequestHdr.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/HttpRequestHdr.java?rev=1511503&r1=1511502&r2=1511503&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/HttpRequestHdr.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/HttpRequestHdr.java Wed Aug 7 21:25:45 2013
@@ -21,6 +21,8 @@ package org.apache.jmeter.protocol.http.
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
@@ -32,6 +34,8 @@ import org.apache.jmeter.protocol.http.c
import org.apache.jmeter.protocol.http.control.HeaderManager;
import org.apache.jmeter.protocol.http.gui.HeaderPanel;
import org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase;
+import org.apache.jmeter.protocol.http.sampler.HTTPSamplerFactory;
+import org.apache.jmeter.protocol.http.util.ConversionUtils;
import org.apache.jmeter.protocol.http.util.HTTPConstants;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.util.JMeterUtils;
@@ -167,6 +171,29 @@ public class HttpRequestHdr {
if (url.startsWith("/")) {
url = HTTPS + "://" + paramHttps + url; // $NON-NLS-1$
}
+ // JAVA Impl accepts URLs with unsafe characters so don't do anything
+ if(HTTPSamplerFactory.IMPL_JAVA.equals(httpSamplerName)) {
+ log.debug("First Line: " + url);
+ return;
+ }
+ try {
+ // See Bug 54482
+ URI testCleanUri = new URI(url);
+ if(log.isDebugEnabled()) {
+ log.debug("Successfully built URI from url:"+url);
+ }
+ } catch (URISyntaxException e) {
+ log.warn("Url '" + url + "' contains unsafe characters, will escape it, message:"+e.getMessage());
+ try {
+ String escapedUrl = ConversionUtils.escapeIllegalURLCharacters(url);
+ if(log.isDebugEnabled()) {
+ log.debug("Successfully escaped url:'"+url +"' to:'"+escapedUrl+"'");
+ }
+ url = escapedUrl;
+ } catch (Exception e1) {
+ log.error("Error escaping URL:'"+url+"', message:"+e1.getMessage());
+ }
+ }
log.debug("First Line: " + url);
}
Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/util/ConversionUtils.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/util/ConversionUtils.java?rev=1511503&r1=1511502&r2=1511503&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/util/ConversionUtils.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/util/ConversionUtils.java Wed Aug 7 21:25:45 2013
@@ -116,7 +116,18 @@ public class ConversionUtils {
return initial;
}
-
+ /**
+ * @param url String Url to escape
+ * @return String cleaned up url
+ * @throws Exception
+ */
+ public static String escapeIllegalURLCharacters(String url) throws Exception{
+ String decodeUrl = URLDecoder.decode(url,"UTF-8");
+ URL urlString = new URL(decodeUrl);
+ URI uri = new URI(urlString.getProtocol(), urlString.getUserInfo(), urlString.getHost(), urlString.getPort(), urlString.getPath(), urlString.getQuery(), urlString.getRef());
+ return uri.toString();
+ }
+
/**
* Escapes reserved chars in a non-encoded URL.
* Warning: if the input URL has already been (partially) encoded,
Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1511503&r1=1511502&r2=1511503&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml (original)
+++ jmeter/trunk/xdocs/changes.xml Wed Aug 7 21:25:45 2013
@@ -224,6 +224,7 @@ Previously the default was 1, which coul
<li><bugzilla>55092</bugzilla> - Log message "WARN - jmeter.protocol.http.sampler.HTTPSamplerBase: Null URL detected (should not happen)" displayed when embedded resource URL is malformed</li>
<li><bugzilla>55161</bugzilla> - Useless processing in SoapSampler.setPostHeaders</li>
<li><bugzilla>54482</bugzilla> - HC fails to follow redirects with non-encoded chars</li>
+<li><bugzilla>54142</bugzilla> - HTTP Proxy Server throws an exception when path contains "|" character</li>
</ul>
<h3>Other Samplers</h3>