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 2016/09/11 13:39:13 UTC
svn commit: r1760249 - in /jmeter/trunk:
src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
test/src/org/apache/jmeter/protocol/http/util/TestHTTPUtils.java
xdocs/changes.xml
Author: pmouawad
Date: Sun Sep 11 13:39:13 2016
New Revision: 1760249
URL: http://svn.apache.org/viewvc?rev=1760249&view=rev
Log:
Bug 60084 - JMeter 3.0 embedded resource URL is silently encoded
Bugzilla Id: 60084
Modified:
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
jmeter/trunk/test/src/org/apache/jmeter/protocol/http/util/TestHTTPUtils.java
jmeter/trunk/xdocs/changes.xml
Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java?rev=1760249&r1=1760248&r2=1760249&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java Sun Sep 11 13:39:13 2016
@@ -1266,25 +1266,21 @@ public abstract class HTTPSamplerBase ex
if (url == null) {
log.warn("Null URL detected (should not happen)");
} else {
- String urlstr = url.toString();
- String urlStrEnc = escapeIllegalURLCharacters(encodeSpaces(urlstr));
- if (!urlstr.equals(urlStrEnc)) {// There were some spaces in the URL
- try {
- url = new URL(urlStrEnc);
- } catch (MalformedURLException e) {
- res.addSubResult(errorResult(new Exception(urlStrEnc + " is not a correct URI"), new HTTPSampleResult(res)));
- setParentSampleSuccess(res, false);
- continue;
- }
+ try {
+ url = escapeIllegalURLCharacters(url);
+ } catch (Exception e) {
+ res.addSubResult(errorResult(new Exception(url.toString() + " is not a correct URI"), new HTTPSampleResult(res)));
+ setParentSampleSuccess(res, false);
+ continue;
}
// I don't think localMatcher can be null here, but check just in case
- if (pattern != null && localMatcher != null && !localMatcher.matches(urlStrEnc, pattern)) {
+ if (pattern != null && localMatcher != null && !localMatcher.matches(url.toString(), pattern)) {
continue; // we have a pattern and the URL does not match, so skip it
}
try {
url = url.toURI().normalize().toURL();
} catch (MalformedURLException | URISyntaxException e) {
- res.addSubResult(errorResult(new Exception(urlStrEnc + " URI can not be normalized", e), new HTTPSampleResult(res)));
+ res.addSubResult(errorResult(new Exception(url.toString() + " URI can not be normalized", e), new HTTPSampleResult(res)));
setParentSampleSuccess(res, false);
continue;
}
@@ -1298,7 +1294,6 @@ public abstract class HTTPSamplerBase ex
res.addSubResult(binRes);
setParentSampleSuccess(res, res.isSuccessful() && (binRes == null || binRes.isSuccessful()));
}
-
}
} catch (ClassCastException e) { // TODO can this happen?
res.addSubResult(errorResult(new Exception(binURL + " is not a correct URI"), new HTTPSampleResult(res)));
@@ -1357,22 +1352,17 @@ public abstract class HTTPSamplerBase ex
}
return null;
}
-
+
/**
* @param url URL to escape
* @return escaped url
*/
- private String escapeIllegalURLCharacters(String url) {
- if (url == null || StringUtils.startsWithIgnoreCase(url, "file:")) {
+ private URL escapeIllegalURLCharacters(java.net.URL url) {
+ if (url == null || url.getProtocol().equals("file")) {
return url;
}
try {
- String escapedUrl = ConversionUtils.escapeIllegalURLCharacters(url);
- if (log.isDebugEnabled() && !escapedUrl.equals(url)) {
- log.debug("Url '" + url + "' has been escaped to '"
- + escapedUrl + "'. Please correct your webpage.");
- }
- return escapedUrl;
+ return ConversionUtils.sanitizeUrl(url).toURL();
} catch (Exception e1) {
log.error("Error escaping URL:'" + url + "', message:" + e1.getMessage());
return url;
Modified: jmeter/trunk/test/src/org/apache/jmeter/protocol/http/util/TestHTTPUtils.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/apache/jmeter/protocol/http/util/TestHTTPUtils.java?rev=1760249&r1=1760248&r2=1760249&view=diff
==============================================================================
--- jmeter/trunk/test/src/org/apache/jmeter/protocol/http/util/TestHTTPUtils.java (original)
+++ jmeter/trunk/test/src/org/apache/jmeter/protocol/http/util/TestHTTPUtils.java Sun Sep 11 13:39:13 2016
@@ -109,6 +109,23 @@ public class TestHTTPUtils {
"http://localhost:8080/!£$*():@~;'\"%^{}[]<>|\\#"); // unencoded path
testSanitizeUrl("http://localhost:8080/!£$*():@~;'%22%25%5E%7B%7D%5B%5D%3C%3E%7C%5C#",
"http://localhost:8080/!£$*():@~;'%22%25%5E%7B%7D%5B%5D%3C%3E%7C%5C#"); // encoded
+
+ testSanitizeUrl("http://localhost/?%2525%255B%255D!@$%25%5E*()#",
+ "http://localhost/?%25%5B%5D!@$%^*()#");
+ testSanitizeUrl("http://localhost/?%2525%255B%255D!@$%25%5E*()#",
+ "http://localhost/?%2525%255B%255D!@$%25%5E*()#");
+
+ testSanitizeUrl("http://localhost/%255B%255D?[]!@$%25%5E*()#",
+ "http://localhost/%5B%5D?[]!@$%^*()#");
+
+ testSanitizeUrl("http://localhost/%255B%255D?[]!@$%25%5E*()#",
+ "http://localhost/%255B%255D?[]!@$%25%5E*()#");
+
+ testSanitizeUrl("http://localhost/IqGo6EM1JEVZ+MSRJqUSo@qhjVMSFBTs/37/0/1",
+ "http://localhost/IqGo6EM1JEVZ+MSRJqUSo@qhjVMSFBTs/37/0/1");
+
+ testSanitizeUrl("http://localhost/test?getItem=%7BsomeID%7D",
+ "http://localhost/test?getItem={someID}");
}
Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1760249&r1=1760248&r2=1760249&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml [utf-8] (original)
+++ jmeter/trunk/xdocs/changes.xml [utf-8] Sun Sep 11 13:39:13 2016
@@ -165,6 +165,7 @@ Summary
<ul>
<li><bug>58888</bug>HTTP(S) Test Script Recorder (ProxyControl) does not add TestElement's returned by SamplerCreator createChildren ()</li>
<li><bug>59902</bug>Https handshake failure when setting <code>httpclient.socket.https.cps</code> property</li>
+ <li><bug>60084</bug>JMeter 3.0 embedded resource URL is silently encoded</li>
</ul>
<h3>Other Samplers</h3>