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>