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>