diff --git a/addOns/spider/CHANGELOG.md b/addOns/spider/CHANGELOG.md index 924744cd1db..2669348b640 100644 --- a/addOns/spider/CHANGELOG.md +++ b/addOns/spider/CHANGELOG.md @@ -8,6 +8,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Do not warn when canonicalising apparent URI, `//`. +### Changed +- Maintenance changes. + ## [0.16.0] - 2025-09-02 ### Added - Support for stopping the spider automation job. diff --git a/addOns/spider/src/main/java/org/zaproxy/addon/spider/DomainsAlwaysInScopeTableModel.java b/addOns/spider/src/main/java/org/zaproxy/addon/spider/DomainsAlwaysInScopeTableModel.java index 4c9d741d296..52959f9c297 100644 --- a/addOns/spider/src/main/java/org/zaproxy/addon/spider/DomainsAlwaysInScopeTableModel.java +++ b/addOns/spider/src/main/java/org/zaproxy/addon/spider/DomainsAlwaysInScopeTableModel.java @@ -79,8 +79,8 @@ public Object getValueAt(int rowIndex, int columnIndex) { @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { - if (columnIndex == 0 && aValue instanceof Boolean) { - domainsInScope.get(rowIndex).setEnabled((Boolean) aValue); + if (columnIndex == 0 && aValue instanceof Boolean val) { + domainsInScope.get(rowIndex).setEnabled(val); fireTableCellUpdated(rowIndex, columnIndex); } } diff --git a/addOns/spider/src/main/java/org/zaproxy/addon/spider/ExtensionSpider2.java b/addOns/spider/src/main/java/org/zaproxy/addon/spider/ExtensionSpider2.java index 3f87c08f3e6..053cfd9b9a2 100644 --- a/addOns/spider/src/main/java/org/zaproxy/addon/spider/ExtensionSpider2.java +++ b/addOns/spider/src/main/java/org/zaproxy/addon/spider/ExtensionSpider2.java @@ -21,6 +21,7 @@ import java.awt.Dimension; import java.awt.EventQueue; +import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.text.MessageFormat; import java.util.ArrayList; @@ -489,8 +490,8 @@ private String createDisplayName(Target target, Object[] customConfigurations) { } else if (target.getStartNode() == null) { if (customConfigurations != null) { for (Object customConfiguration : customConfigurations) { - if (customConfiguration instanceof URI) { - return abbreviateDisplayName(((URI) customConfiguration).toString()); + if (customConfiguration instanceof URI uri) { + return abbreviateDisplayName(uri.toString()); } } } @@ -508,8 +509,8 @@ private String createDisplayName(Target target, Object[] customConfigurations) { private HttpPrefixFetchFilter getUriPrefixFecthFilter(Object[] customConfigurations) { if (customConfigurations != null) { for (Object customConfiguration : customConfigurations) { - if (customConfiguration instanceof HttpPrefixFetchFilter) { - return (HttpPrefixFetchFilter) customConfiguration; + if (customConfiguration instanceof HttpPrefixFetchFilter prefixFetchFilter) { + return prefixFetchFilter; } } } @@ -630,8 +631,8 @@ protected String getTargetUriOutOfScope(Target target, Object[] contextSpecificO if (node == null) { continue; } - if (node instanceof StructuralSiteNode) { - SiteNode siteNode = ((StructuralSiteNode) node).getSiteNode(); + if (node instanceof StructuralSiteNode ssNode) { + SiteNode siteNode = ssNode.getSiteNode(); if (!siteNode.isIncludedInScope()) { return node.getURI().toString(); } @@ -645,10 +646,10 @@ protected String getTargetUriOutOfScope(Target target, Object[] contextSpecificO } if (contextSpecificObjects != null) { for (Object obj : contextSpecificObjects) { - if (obj instanceof URI) { - String uri = ((URI) obj).toString(); - if (!isTargetUriInScope(uri)) { - return uri; + if (obj instanceof URI uri) { + String uriStr = uri.toString(); + if (!isTargetUriInScope(uriStr)) { + return uriStr; } } } @@ -758,7 +759,7 @@ private ZapMenuItem getMenuItemCustomScan() { "menu.tools.spider", getView() .getMenuShortcutKeyStroke( - KeyEvent.VK_S, KeyEvent.ALT_DOWN_MASK, false)); + KeyEvent.VK_S, InputEvent.ALT_DOWN_MASK, false)); menuItemCustomScan.setEnabled(Control.getSingleton().getMode() != Mode.safe); menuItemCustomScan.addActionListener(e -> showSpiderDialog((Target) null)); diff --git a/addOns/spider/src/main/java/org/zaproxy/addon/spider/OptionsSpiderPanel.java b/addOns/spider/src/main/java/org/zaproxy/addon/spider/OptionsSpiderPanel.java index 58917ae6d00..1365f1bd6e0 100644 --- a/addOns/spider/src/main/java/org/zaproxy/addon/spider/OptionsSpiderPanel.java +++ b/addOns/spider/src/main/java/org/zaproxy/addon/spider/OptionsSpiderPanel.java @@ -390,11 +390,7 @@ private JCheckBox getChkProcessForm() { new ChangeListener() { @Override public void stateChanged(ChangeEvent ev) { - if (chkProcessForm.isSelected()) { - chkPostForm.setEnabled(true); - } else { - chkPostForm.setEnabled(false); - } + chkPostForm.setEnabled(chkProcessForm.isSelected()); } }); } diff --git a/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderAPI.java b/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderAPI.java index c055acc2038..ddb83f2aefc 100644 --- a/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderAPI.java +++ b/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderAPI.java @@ -231,7 +231,7 @@ public ApiResponse handleApiAction(String name, JSONObject params) throws ApiExc String url = ApiUtils.getOptionalStringParam(params, PARAM_URL); if (params.containsKey(PARAM_MAX_CHILDREN)) { String maxChildrenStr = params.getString(PARAM_MAX_CHILDREN); - if (maxChildrenStr != null && maxChildrenStr.length() > 0) { + if (maxChildrenStr != null && !maxChildrenStr.isEmpty()) { try { maxChildren = Integer.parseInt(maxChildrenStr); } catch (NumberFormatException e) { @@ -276,7 +276,7 @@ public ApiResponse handleApiAction(String name, JSONObject params) throws ApiExc } if (params.containsKey(PARAM_MAX_CHILDREN)) { String maxChildrenStr = params.getString(PARAM_MAX_CHILDREN); - if (maxChildrenStr != null && maxChildrenStr.length() > 0) { + if (maxChildrenStr != null && !maxChildrenStr.isEmpty()) { try { maxChildren = Integer.parseInt(maxChildrenStr); } catch (NumberFormatException e) { diff --git a/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderDialog.java b/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderDialog.java index c43fa4c2198..c6399216019 100644 --- a/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderDialog.java +++ b/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderDialog.java @@ -238,7 +238,7 @@ public void targetSelected(String field, Target node) { } } this.setComboFields(FIELD_CONTEXT, ctxNames, ""); - this.getField(FIELD_CONTEXT).setEnabled(ctxNames.size() > 0); + this.getField(FIELD_CONTEXT).setEnabled(!ctxNames.isEmpty()); } private Context getSelectedContext() { diff --git a/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderMessagesTable.java b/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderMessagesTable.java index 6dc862627ea..815babfc7a0 100644 --- a/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderMessagesTable.java +++ b/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderMessagesTable.java @@ -131,14 +131,14 @@ protected Component doHighlight(Component component, ComponentAdapter adapter) { boolean processed = cell.isSuccessful(); Icon icon = getProcessedIcon(processed); - if (component instanceof IconAware) { - ((IconAware) component).setIcon(icon); - } else if (component instanceof JLabel) { - ((JLabel) component).setIcon(icon); + if (component instanceof IconAware iconAware) { + iconAware.setIcon(icon); + } else if (component instanceof JLabel label) { + label.setIcon(icon); } - if (component instanceof JLabel) { - ((JLabel) component).setText(processed ? "" : cell.getLabel()); + if (component instanceof JLabel label) { + label.setText(processed ? "" : cell.getLabel()); } return component; diff --git a/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderMessagesTableModel.java b/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderMessagesTableModel.java index 2802b1d5028..0f93ba94329 100644 --- a/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderMessagesTableModel.java +++ b/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderMessagesTableModel.java @@ -149,12 +149,8 @@ private ProcessedCellItem getProcessedCellItem(boolean processed, String reasonN if (processed) { return SUCCESSFULLY_PROCESSED_CELL_ITEM; } - ProcessedCellItem processedCellItem = cacheProcessedCellItems.get(reasonNotProcessed); - if (processedCellItem == null) { - processedCellItem = new ProcessedCellItem(processed, reasonNotProcessed); - cacheProcessedCellItems.put(reasonNotProcessed, processedCellItem); - } - return processedCellItem; + return cacheProcessedCellItems.computeIfAbsent( + reasonNotProcessed, k -> new ProcessedCellItem(processed, k)); } @Override diff --git a/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderScanController.java b/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderScanController.java index 897c1487a75..0baafd74fe9 100644 --- a/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderScanController.java +++ b/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderScanController.java @@ -107,14 +107,14 @@ public int startScan(String name, Target target, User user, Object[] contextSpec if (obj instanceof SpiderParam) { LOGGER.debug("Setting custom spider params"); spiderParams = (SpiderParam) obj; - } else if (obj instanceof SpiderParser) { - customSpiderParsers.add((SpiderParser) obj); - } else if (obj instanceof FetchFilter) { - customFetchFilters.add((FetchFilter) obj); - } else if (obj instanceof ParseFilter) { - customParseFilters.add((ParseFilter) obj); - } else if (obj instanceof URI) { - startUri = (URI) obj; + } else if (obj instanceof SpiderParser parser) { + customSpiderParsers.add(parser); + } else if (obj instanceof FetchFilter fetchFilter) { + customFetchFilters.add(fetchFilter); + } else if (obj instanceof ParseFilter parseFilter) { + customParseFilters.add(parseFilter); + } else if (obj instanceof URI uri) { + startUri = uri; } else { LOGGER.error( "Unexpected contextSpecificObject: {}", diff --git a/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderTask.java b/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderTask.java index 8a2a3c67f5a..cee63833fc6 100644 --- a/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderTask.java +++ b/addOns/spider/src/main/java/org/zaproxy/addon/spider/SpiderTask.java @@ -117,7 +117,7 @@ public SpiderTask(Spider parent, SpiderResourceFound resourceFound, URI uri) { if (resourceFound.getMessage() != null && parent.getSpiderParam().isSendRefererHeader()) { requestHeader.setHeader( - HttpRequestHeader.REFERER, + HttpHeader.REFERER, resourceFound.getMessage().getRequestHeader().getURI().toString()); } HttpMessage msg = new HttpMessage(requestHeader); diff --git a/addOns/spider/src/main/java/org/zaproxy/addon/spider/UrlCanonicalizer.java b/addOns/spider/src/main/java/org/zaproxy/addon/spider/UrlCanonicalizer.java index 45fcd6683de..0e712e31915 100644 --- a/addOns/spider/src/main/java/org/zaproxy/addon/spider/UrlCanonicalizer.java +++ b/addOns/spider/src/main/java/org/zaproxy/addon/spider/UrlCanonicalizer.java @@ -156,7 +156,7 @@ public static String getCanonicalUrl(ParseContext ctx, String url, String baseUR queryString = (canonicalParams.isEmpty() ? "" : "?" + canonicalParams); /* Add starting slash if needed */ - if (path.length() == 0) { + if (path.isEmpty()) { path = "/" + path; } @@ -255,7 +255,7 @@ static String buildCleanedParametersUriRepresentation( String cleanedQuery = getCleanedQuery(uri.getEscapedQuery(), irrelevantParameter); // Add the parameters' names to the uri representation. - if (cleanedQuery.length() > 0) { + if (!cleanedQuery.isEmpty()) { retVal.append('?').append(cleanedQuery); } @@ -344,9 +344,7 @@ private static String getCleanedQuery( private static String cleanODataPath(String path, HandleParametersOption handleParameters) { String cleanedPath = path; - if (HandleParametersOption.USE_ALL.equals(handleParameters)) { - cleanedPath = path; - } else { + if (!HandleParametersOption.USE_ALL.equals(handleParameters)) { // check for single ID (unnamed) Matcher matcher = PATTERN_RESOURCE_IDENTIFIER_UNQUOTED.matcher(path); @@ -429,7 +427,7 @@ private static SortedSet createSortedParameters(final String que final SortedSet params = new TreeSet<>(); for (final String pair : pairs) { - if (pair.length() == 0) { + if (pair.isEmpty()) { continue; } diff --git a/addOns/spider/src/main/java/org/zaproxy/addon/spider/automation/SpiderJobDialog.java b/addOns/spider/src/main/java/org/zaproxy/addon/spider/automation/SpiderJobDialog.java index 0dcb04a1a84..cdd8257281d 100644 --- a/addOns/spider/src/main/java/org/zaproxy/addon/spider/automation/SpiderJobDialog.java +++ b/addOns/spider/src/main/java/org/zaproxy/addon/spider/automation/SpiderJobDialog.java @@ -98,8 +98,8 @@ public SpiderJobDialog(SpiderJob job) { // Cannot select the node as it might not be present in the Sites tree this.addNodeSelectField(0, URL_PARAM, null, true, false); Component urlField = this.getField(URL_PARAM); - if (urlField instanceof JTextField) { - ((JTextField) urlField).setText(this.job.getParameters().getUrl()); + if (urlField instanceof JTextField field) { + field.setText(this.job.getParameters().getUrl()); } this.addNumberField( 0, @@ -179,9 +179,9 @@ public Component getListCellRendererComponent( (JLabel) super.getListCellRendererComponent( list, value, index, isSelected, cellHasFocus); - if (value instanceof HandleParametersOption) { + if (value instanceof HandleParametersOption hpo) { // The name is i18n'ed - label.setText(((HandleParametersOption) value).getName()); + label.setText(hpo.getName()); } return label; } @@ -280,9 +280,7 @@ public void save() { this.job.getParameters().setLogoutAvoidance(this.getBoolValue(LOGOUT_AVOIDANCE_PARAM)); Object hpoObj = handleParamsModel.getSelectedItem(); - if (hpoObj instanceof SpiderParam.HandleParametersOption) { - SpiderParam.HandleParametersOption hpo = - (SpiderParam.HandleParametersOption) hpoObj; + if (hpoObj instanceof SpiderParam.HandleParametersOption hpo) { this.job.getParameters().setHandleParameters(hpo); } diff --git a/addOns/spider/src/main/java/org/zaproxy/addon/spider/filters/HttpPrefixFetchFilter.java b/addOns/spider/src/main/java/org/zaproxy/addon/spider/filters/HttpPrefixFetchFilter.java index 8239626bd77..af918f6170f 100644 --- a/addOns/spider/src/main/java/org/zaproxy/addon/spider/filters/HttpPrefixFetchFilter.java +++ b/addOns/spider/src/main/java/org/zaproxy/addon/spider/filters/HttpPrefixFetchFilter.java @@ -234,13 +234,8 @@ public String getNormalisedPrefix() { * false} otherwise */ private static boolean isDefaultHttpOrHttpsPort(String scheme, int port) { - if (port == DEFAULT_HTTP_PORT && isHttp(scheme)) { - return true; - } - if (port == DEFAULT_HTTPS_PORT && isHttps(scheme)) { - return true; - } - return false; + return (port == DEFAULT_HTTP_PORT && isHttp(scheme)) + || (port == DEFAULT_HTTPS_PORT && isHttps(scheme)); } /** diff --git a/addOns/spider/src/main/java/org/zaproxy/addon/spider/internal/ui/IrrelevantParametersTableModel.java b/addOns/spider/src/main/java/org/zaproxy/addon/spider/internal/ui/IrrelevantParametersTableModel.java index 34e72691059..3307587ec9a 100644 --- a/addOns/spider/src/main/java/org/zaproxy/addon/spider/internal/ui/IrrelevantParametersTableModel.java +++ b/addOns/spider/src/main/java/org/zaproxy/addon/spider/internal/ui/IrrelevantParametersTableModel.java @@ -82,8 +82,8 @@ public Object getValueAt(int rowIndex, int columnIndex) { @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { - if (columnIndex == 0 && aValue instanceof Boolean) { - irrelevantParameters.get(rowIndex).setEnabled((Boolean) aValue); + if (columnIndex == 0 && aValue instanceof Boolean val) { + irrelevantParameters.get(rowIndex).setEnabled(val); fireTableCellUpdated(rowIndex, columnIndex); } } diff --git a/addOns/spider/src/main/java/org/zaproxy/addon/spider/parser/SpiderGitParser.java b/addOns/spider/src/main/java/org/zaproxy/addon/spider/parser/SpiderGitParser.java index 2198f3fb7b4..86c9c9c7c0e 100644 --- a/addOns/spider/src/main/java/org/zaproxy/addon/spider/parser/SpiderGitParser.java +++ b/addOns/spider/src/main/java/org/zaproxy/addon/spider/parser/SpiderGitParser.java @@ -198,14 +198,15 @@ public boolean parseResource(ParseContext ctx) { ++n; byte byteRead = dataBuffer.get(); entryBytesRead++; - if (n == 1) // zero the msb of the first byte read - removeNfromPreviousName = + if (n == 1) { // zero the msb of the first byte read + removeNfromPreviousName = (removeNfromPreviousName << 8) | (0xFF & (byteRead & msbunsetmask)); - else // set the msb of subsequent bytes read - removeNfromPreviousName = + } else { // set the msb of subsequent bytes read + removeNfromPreviousName = (removeNfromPreviousName << 8) | (0xFF & (byteRead | msbsetmask)); + } if ((byteRead & msbsetmask) == 0) msbSet = false; // break if msb is NOT set in the byte } @@ -283,7 +284,7 @@ public boolean parseResource(ParseContext ctx) { // Git does not store entries for directories, but just files/symlinks/Git links, so // no need to handle directories here, unlike with SVN, for instance. - if (indexEntryName != null && indexEntryName.length() > 0) { + if (indexEntryName != null && !indexEntryName.isEmpty()) { getLogger() .info( "Found file/symbolic link/gitlink {} in the Git entries file", diff --git a/addOns/spider/src/main/java/org/zaproxy/addon/spider/parser/SpiderHtmlFormParser.java b/addOns/spider/src/main/java/org/zaproxy/addon/spider/parser/SpiderHtmlFormParser.java index b0b6f3d4f65..c27cdb5bcd2 100644 --- a/addOns/spider/src/main/java/org/zaproxy/addon/spider/parser/SpiderHtmlFormParser.java +++ b/addOns/spider/src/main/java/org/zaproxy/addon/spider/parser/SpiderHtmlFormParser.java @@ -212,7 +212,7 @@ private List processFormActions( element -> Objects.equals( element.getAttributeValue("form"), targetId)) - .collect(Collectors.toList())); + .toList()); } if (!formButtonElements.isEmpty()) { diff --git a/addOns/spider/src/main/java/org/zaproxy/addon/spider/parser/SpiderHtmlParser.java b/addOns/spider/src/main/java/org/zaproxy/addon/spider/parser/SpiderHtmlParser.java index 19555e90f1e..2faecd34bbe 100644 --- a/addOns/spider/src/main/java/org/zaproxy/addon/spider/parser/SpiderHtmlParser.java +++ b/addOns/spider/src/main/java/org/zaproxy/addon/spider/parser/SpiderHtmlParser.java @@ -305,7 +305,7 @@ private boolean parseSource(ParseContext ctx, Source source, String baseURL) { String basePath = ""; if (baseUrlElements.length > 3) { basePath = baseUrlElements[3]; - if (basePath.length() > 0) { + if (!basePath.isEmpty()) { basePath = "/" + basePath + "/"; } } @@ -321,7 +321,7 @@ private boolean parseSource(ParseContext ctx, Source source, String baseURL) { if (baseTagSet) { if (foundMatch.charAt(0) == '/' && foundMatch.indexOf("//") != 0 - && (basePath.length() == 0 || !foundMatch.startsWith(basePath))) { + && (basePath.isEmpty() || !foundMatch.startsWith(basePath))) { // Do not trim first slash off if it starts with the basePath // This is to prevent matching text with the same path and then looping // down diff --git a/addOns/spider/src/main/java/org/zaproxy/addon/spider/parser/SpiderSvnEntriesParser.java b/addOns/spider/src/main/java/org/zaproxy/addon/spider/parser/SpiderSvnEntriesParser.java index a431b43a0c2..9afccf8129d 100644 --- a/addOns/spider/src/main/java/org/zaproxy/addon/spider/parser/SpiderSvnEntriesParser.java +++ b/addOns/spider/src/main/java/org/zaproxy/addon/spider/parser/SpiderSvnEntriesParser.java @@ -24,6 +24,8 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; @@ -194,7 +196,7 @@ public boolean parseResource(ParseContext ctx) { String filename = rsNodes.getString(2); String svn_filename = rsNodes.getString(3); - if (filename != null && filename.length() > 0) { + if (filename != null && !filename.isEmpty()) { getLogger() .debug( "Found a file/directory name in the (SQLite based) SVN wc.db file"); @@ -215,7 +217,7 @@ public boolean parseResource(ParseContext ctx) { // point. if (kind.equals("file") && svn_filename != null - && svn_filename.length() > 0) { + && !svn_filename.isEmpty()) { processUrl(ctx, svn_filename); } } @@ -229,7 +231,7 @@ public boolean parseResource(ParseContext ctx) { "Got a potential Repository from the SVN wc.db file (format {})", svnFormat); String repos_path = rsRepo.getString(1); - if (repos_path != null && repos_path.length() > 0) { + if (repos_path != null && !repos_path.isEmpty()) { // exclude local repositories here.. we cannot retrieve or // spider them Matcher repoMatcher = @@ -268,10 +270,7 @@ public boolean parseResource(ParseContext ctx) { "Error parsing temporary SVN SQLite database {}", sqliteConnectionUrl); } finally { - // delete the temp file. - // this will be deleted when the VM is shut down anyway, but better to be safe - // than to run out of disk space. - tempSqliteFile.delete(); + deleteTempFile(tempSqliteFile); } } catch (IOException | ClassNotFoundException e) { @@ -298,7 +297,8 @@ public boolean parseResource(ParseContext ctx) { doc = dBuilder.parse( new InputSource( - new ByteArrayInputStream(content.getBytes("utf-8")))); + new ByteArrayInputStream( + content.getBytes(StandardCharsets.UTF_8)))); } catch (SAXException | IOException e) { getLogger() .error( @@ -316,7 +316,7 @@ public boolean parseResource(ParseContext ctx) { String svnEntryUrl = ((Element) svnEntryNode).getAttribute("url"); String svnEntryCopyFromUrl = ((Element) svnEntryNode).getAttribute("copyfrom-url"); - if (svnEntryName != null && svnEntryName.length() > 0) { + if (svnEntryName != null && !svnEntryName.isEmpty()) { getLogger() .debug( "Found a file/directory name in the (XML based) SVN < 1.4 entries file"); @@ -333,9 +333,7 @@ public boolean parseResource(ParseContext ctx) { // expected to be true for the first entry only (the directory housing other // entries) - if (svnEntryName != null - && svnEntryName.length() == 0 - && svnEntryKind.equals("dir")) { + if (svnEntryName != null && svnEntryName.isEmpty() && svnEntryKind.equals("dir")) { // exclude local repositories here.. we cannot retrieve or spider them Matcher repoMatcher = SVN_REPO_LOCATION_PATTERN.matcher(svnEntryUrl); if (repoMatcher.find()) { @@ -362,14 +360,14 @@ public boolean parseResource(ParseContext ctx) { String[] lines = content.split("\n"); for (String line : lines) { // If the line is empty, skip it - if (line.length() > 0) { + if (!line.isEmpty()) { Matcher matcher = SVN_TEXT_FORMAT_FILE_OR_DIRECTORY_PATTERN.matcher(line); if (matcher.find()) { // filetype is "dir" or "file", as per the contents of the SVN file. String filetype = matcher.group(0); // the previous line actually contains the file/directory name. - if (previousline != null && previousline.length() > 0) { + if (previousline != null && !previousline.isEmpty()) { getLogger() .debug( "Found a file/directory name in the (text based) SVN 1.4/1.5/1.6 SVN entries file"); @@ -409,6 +407,17 @@ public boolean parseResource(ParseContext ctx) { return true; } + private void deleteTempFile(File tempSqliteFile) { + // delete the temp file. + // this will be deleted when the VM is shut down anyway, but better to be safe + // than to run out of disk space. + try { + Files.deleteIfExists(tempSqliteFile.toPath()); + } catch (IOException e) { + getLogger().warn("Failed to delete temporary SQLite file '{}'", tempSqliteFile, e); + } + } + @Override public boolean canParseResource(ParseContext ctx, boolean wasAlreadyParsed) { // matches the file name of files that should be parsed with the SVN entries file parser diff --git a/addOns/spider/src/test/java/org/zaproxy/addon/spider/automation/SpiderJobUnitTest.java b/addOns/spider/src/test/java/org/zaproxy/addon/spider/automation/SpiderJobUnitTest.java index c5fd2c32267..1ccf150eed0 100644 --- a/addOns/spider/src/test/java/org/zaproxy/addon/spider/automation/SpiderJobUnitTest.java +++ b/addOns/spider/src/test/java/org/zaproxy/addon/spider/automation/SpiderJobUnitTest.java @@ -644,27 +644,28 @@ void shouldWarnIfNotOkResponse() throws Exception { @Test void shouldVerifyAllOfTheParameters() { String yamlStr = - "parameters:\n" - + " context: context1\n" - + " url: url1\n" - + " maxDuration: 2\n" - + " maxDepth: 2\n" - + " maxChildren: 2\n" - + " acceptCookies: true\n" - + " handleODataParametersVisited: true\n" - + " handleParameters: ignore_completely\n" - + " maxParseSizeBytes: 2\n" - + " parseComments: true\n" - + " parseGit: true\n" - + " parseDsStore: true\n" - + " parseRobotsTxt: true\n" - + " parseSitemapXml: true\n" - + " parseSVNEntries: true\n" - + " postForm: true\n" - + " processForm: true\n" - + " sendRefererHeader: true\n" - + " threadCount: 2\n" - + " userAgent: ua2"; + """ + parameters: + context: context1 + url: url1 + maxDuration: 2 + maxDepth: 2 + maxChildren: 2 + acceptCookies: true + handleODataParametersVisited: true + handleParameters: ignore_completely + maxParseSizeBytes: 2 + parseComments: true + parseGit: true + parseDsStore: true + parseRobotsTxt: true + parseSitemapXml: true + parseSVNEntries: true + postForm: true + processForm: true + sendRefererHeader: true + threadCount: 2 + userAgent: ua2"""; AutomationProgress progress = new AutomationProgress(); Yaml yaml = new Yaml(); Object data = yaml.load(yamlStr); @@ -721,10 +722,11 @@ void shouldVerifyDsStoreParameterWhenFalse() { @Test void shouldWarnOnDeprecatedFields() { String yamlStr = - "parameters:\n" - + " context: context1\n" - + " failIfFoundUrlsLessThan: true\n" - + " warnIfFoundUrlsLessThan: true"; + """ + parameters: + context: context1 + failIfFoundUrlsLessThan: true + warnIfFoundUrlsLessThan: true"""; AutomationProgress progress = new AutomationProgress(); Yaml yaml = new Yaml(); Object data = yaml.load(yamlStr); @@ -772,7 +774,12 @@ void shouldWarnOnDeprecatedRequestWaitTimeField() { @Test void shouldWarnOnUnknownFields() { - String yamlStr = "parameters:\n" + " context: context1\n" + " unknown: true\n"; + String yamlStr = + """ + parameters: + context: context1 + unknown: true + """; AutomationProgress progress = new AutomationProgress(); Yaml yaml = new Yaml(); Object data = yaml.load(yamlStr); diff --git a/addOns/spider/src/test/java/org/zaproxy/addon/spider/parser/SvgHrefParserUnitTest.java b/addOns/spider/src/test/java/org/zaproxy/addon/spider/parser/SvgHrefParserUnitTest.java index 26fab6539ba..4e468e0f300 100644 --- a/addOns/spider/src/test/java/org/zaproxy/addon/spider/parser/SvgHrefParserUnitTest.java +++ b/addOns/spider/src/test/java/org/zaproxy/addon/spider/parser/SvgHrefParserUnitTest.java @@ -125,10 +125,11 @@ void shouldNotParseResourceWhenNoHrefInSvg() { // Given messageWith("test.svg"); msg.setResponseBody( - "\n" - + "\n" - + " \n" - + ""); + """ + + + + """); // When boolean parse = parser.parseResource(ctx); // Then @@ -140,13 +141,14 @@ void shouldNotParseResourceWhenSaxParseExceptionEncountered() { // Given messageWith("test.svg"); msg.setResponseBody( - "\n" - + "\n" - + " \n" - // The following line produces a SAXParseException other than the DOCTYPE - // issue tested elsewhere due to the ampersand outside of a CDATA block - + "Test & Text" - + ""); + // The line 4 produces a SAXParseException other than the DOCTYPE + // issue tested elsewhere due to the ampersand outside of a CDATA block + """ + + + + Test & Text + """); // When boolean parse = parser.parseResource(ctx); // Then @@ -158,14 +160,15 @@ void shouldNotParseResourceWithDoctypeDeclaration() { // Given messageWith("test.svg"); msg.setResponseBody( - "\n" - + "\n" - + "\n" - + " \n" - + " \n" - + " \n" - + " " - + ""); + """ + + + + + + + + """); // When boolean parse = parser.parseResource(ctx); // Then