You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by fs...@apache.org on 2020/12/27 13:49:35 UTC

[jmeter] branch master updated: Try harder to correctly guess the URL for applets, when download embedded URLs is enabled

This is an automated email from the ASF dual-hosted git repository.

fschumacher pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jmeter.git


The following commit(s) were added to refs/heads/master by this push:
     new 38f8738  Try harder to correctly guess the URL for applets, when download embedded URLs is enabled
38f8738 is described below

commit 38f8738c3d5b7152e41ceae6e0db97e7b2c3953c
Author: Felix Schumacher <fe...@internetallee.de>
AuthorDate: Sun Dec 27 14:49:01 2020 +0100

    Try harder to correctly guess the URL for applets, when download embedded URLs is enabled
    
    Bugzilla Id: 65029
---
 .../apache/jmeter/protocol/http/parser/HTMLParser.java    |  1 +
 .../jmeter/protocol/http/parser/JTidyHTMLParser.java      | 11 ++++++++++-
 .../jmeter/protocol/http/parser/JsoupBasedHtmlParser.java | 15 ++++++++++++++-
 .../protocol/http/parser/LagartoBasedHtmlParser.java      | 15 ++++++++++++++-
 .../protocol/http/parser/TestBug60842HtmlParser.java      |  6 ++++++
 xdocs/changes.xml                                         |  1 +
 6 files changed, 46 insertions(+), 3 deletions(-)

diff --git a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/parser/HTMLParser.java b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/parser/HTMLParser.java
index 8c8abf1..d211cdf 100644
--- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/parser/HTMLParser.java
+++ b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/parser/HTMLParser.java
@@ -36,6 +36,7 @@ public abstract class HTMLParser extends BaseParser {
 
     private static final Logger log = LoggerFactory.getLogger(HTMLParser.class);
 
+    protected static final String ATT_ARCHIVE       = "archive"; // $NON-NLS-1$
     protected static final String ATT_BACKGROUND    = "background";// $NON-NLS-1$
     protected static final String ATT_CODE          = "code";// $NON-NLS-1$
     protected static final String ATT_CODEBASE      = "codebase";// $NON-NLS-1$
diff --git a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/parser/JTidyHTMLParser.java b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/parser/JTidyHTMLParser.java
index 0541a40..f350507 100644
--- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/parser/JTidyHTMLParser.java
+++ b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/parser/JTidyHTMLParser.java
@@ -111,7 +111,16 @@ class JTidyHTMLParser extends HTMLParser {
             }
 
             if (name.equalsIgnoreCase(TAG_APPLET)) {
-                urls.addURL(getValue(attrs, "code"), baseUrl);
+                String codebase = getValue(attrs, ATT_CODEBASE);
+                String code = getValue(attrs, ATT_ARCHIVE);
+                if (StringUtils.isBlank(code)) {
+                    code = getValue(attrs, ATT_CODE);
+                }
+                if (StringUtils.isBlank(codebase)) {
+                    urls.addURL(code, baseUrl);
+                } else {
+                    urls.addURL(codebase + "/" + code, baseUrl);
+                }
                 break;
             }
 
diff --git a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/parser/JsoupBasedHtmlParser.java b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/parser/JsoupBasedHtmlParser.java
index fbcaf39..9141910 100644
--- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/parser/JsoupBasedHtmlParser.java
+++ b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/parser/JsoupBasedHtmlParser.java
@@ -93,7 +93,20 @@ public class JsoupBasedHtmlParser extends HTMLParser {
             } else if (tagName.equals(TAG_IMAGE)) {
                 extractAttribute(tag, ATT_SRC);
             } else if (tagName.equals(TAG_APPLET)) {
-                extractAttribute(tag, ATT_CODE);
+                CharSequence codebase = tag.attr(ATT_CODEBASE);
+                CharSequence archive = tag.attr(ATT_ARCHIVE);
+                CharSequence code = tag.attr(ATT_CODE);
+                if (StringUtils.isNotBlank(codebase)) {
+                    String result;
+                    if (StringUtils.isNotBlank(archive)) {
+                        result = codebase.toString() + "/" + archive;
+                    } else {
+                        result = codebase.toString() + "/" + code;
+                    }
+                    urls.addURL(normalizeUrlValue(result), baseUrl.url);
+                } else {
+                    extractAttribute(tag, ATT_CODE);
+                }
             } else if (tagName.equals(TAG_OBJECT)) {
                 extractAttribute(tag, ATT_CODEBASE);
                 extractAttribute(tag, ATT_DATA);
diff --git a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/parser/LagartoBasedHtmlParser.java b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/parser/LagartoBasedHtmlParser.java
index 4086e27..781be99 100644
--- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/parser/LagartoBasedHtmlParser.java
+++ b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/parser/LagartoBasedHtmlParser.java
@@ -128,7 +128,20 @@ public class LagartoBasedHtmlParser extends HTMLParser {
                 } else if (tag.nameEquals(TAG_IMAGE)) {
                     extractAttribute(tag, ATT_SRC);
                 } else if (tag.nameEquals(TAG_APPLET)) {
-                    extractAttribute(tag, ATT_CODE);
+                    CharSequence codebase = tag.getAttributeValue(ATT_CODEBASE);
+                    CharSequence archive = tag.getAttributeValue(ATT_ARCHIVE);
+                    CharSequence code = tag.getAttributeValue(ATT_CODE);
+                    if (StringUtils.isNotBlank(codebase)) {
+                        String result;
+                        if (StringUtils.isNotBlank(archive)) {
+                            result = codebase.toString() + "/" + archive;
+                        } else {
+                            result = codebase.toString() + "/" + code;
+                        }
+                        urls.addURL(normalizeUrlValue(result), baseUrl.url);
+                    } else {
+                        extractAttribute(tag, ATT_CODE);
+                    }
                 } else if (tag.nameEquals(TAG_OBJECT)) {
                     extractAttribute(tag, ATT_CODEBASE);
                     extractAttribute(tag, ATT_DATA);
diff --git a/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/parser/TestBug60842HtmlParser.java b/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/parser/TestBug60842HtmlParser.java
index c30d9d7..4007d77 100644
--- a/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/parser/TestBug60842HtmlParser.java
+++ b/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/parser/TestBug60842HtmlParser.java
@@ -112,6 +112,12 @@ public class TestBug60842HtmlParser {
                     new Object[] { parserToTest,
                             "<link href='favicon.ico' rel='icon' type='image/vnd.microsoft.icon'/>",
                             "http://example.org/favicon.ico" },
+                    new Object[] { parserToTest,
+                            "<applet codebase='/some/path' code='Application.class' />",
+                            "http://example.org/some/path/Application.class" },
+                    new Object[] { parserToTest,
+                            "<applet codebase='/some/path' code='Application.class' archive='app.jar' />",
+                            "http://example.org/some/path/app.jar" },
                     new Object[] { parserToTest, "<embed src=''/>", "" },
                     new Object[] { parserToTest, "<embed src='  '/>", "" })) {
                 result.add(data);
diff --git a/xdocs/changes.xml b/xdocs/changes.xml
index e623244..6a06689 100644
--- a/xdocs/changes.xml
+++ b/xdocs/changes.xml
@@ -142,6 +142,7 @@ Summary
   <li><bug>65004</bug>HTTP(S) Test Script recorder computes wrong HTTP Request breaking the application. Contributed by Ubik Load Pack (https://ubikloadpack.com)</li>
   <li><bug>64543</bug>On MacOSX, Darklaf- IntelliJ Theme throws NPE in javax.swing.ToolTipManager.initiateToolTip</li>
   <li><bug>65024</bug>Sending mime type with parameter throws IllegalArgumentException</li>
+  <li><bug>65029</bug>Try harder to correctly guess the URL for applets, when download embedded URLs is enabled</li>
 </ul>
 
 <h3>Other Samplers</h3>