diff --git a/core/src/main/java/hudson/tools/ZipExtractionInstaller.java b/core/src/main/java/hudson/tools/ZipExtractionInstaller.java index 4646980ea8..a9a1be899b 100644 --- a/core/src/main/java/hudson/tools/ZipExtractionInstaller.java +++ b/core/src/main/java/hudson/tools/ZipExtractionInstaller.java @@ -83,16 +83,16 @@ public String getSubdir() { } @Override - public FilePath performInstallation(ToolInstallation tool, Node node, TaskListener log) throws IOException, InterruptedException { + public FilePath performInstallation(ToolInstallation tool, Node node, TaskListener log) + throws IOException, InterruptedException { FilePath dir = preferredLocation(tool, node); - if (dir.installIfNecessaryFrom(new URL(url), log, "Unpacking " + url + " to " + dir + " on " + node.getDisplayName())) { + if (dir.installIfNecessaryFrom( + new URL(url), + log, + "Unpacking " + url + " to " + dir + " on " + node.getDisplayName())) { dir.act(new ChmodRecAPlusX()); } - if (subdir == null) { - return dir; - } else { - return dir.child(subdir); - } + return (subdir == null) ? dir : dir.child(subdir); } @Extension @Symbol("zip") @@ -119,6 +119,7 @@ public FormValidation doCheckUrl(@QueryParameter String value) throws Interrupte } catch (URISyntaxException e) { return FormValidation.error(e, Messages.ZipExtractionInstaller_malformed_url()); } + if (uri.getScheme() != null && !uri.getScheme().startsWith("http")) { try { Path.of(uri); @@ -127,17 +128,19 @@ public FormValidation doCheckUrl(@QueryParameter String value) throws Interrupte return FormValidation.error(e, Messages.ZipExtractionInstaller_malformed_url()); } } - HttpClient httpClient = ProxyConfiguration.newHttpClient(); - HttpRequest httpRequest; - try { - httpRequest = ProxyConfiguration.newHttpRequestBuilder(uri) - .method("HEAD", HttpRequest.BodyPublishers.noBody()) - .build(); - } catch (IllegalArgumentException e) { - return FormValidation.error(e, Messages.ZipExtractionInstaller_malformed_url()); - } - try { - HttpResponse httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.discarding()); + + try (HttpClient httpClient = ProxyConfiguration.newHttpClient()) { + HttpRequest httpRequest; + try { + httpRequest = ProxyConfiguration.newHttpRequestBuilder(uri) + .method("HEAD", HttpRequest.BodyPublishers.noBody()) + .build(); + } catch (IllegalArgumentException e) { + return FormValidation.error(e, Messages.ZipExtractionInstaller_malformed_url()); + } + + HttpResponse httpResponse = + httpClient.send(httpRequest, HttpResponse.BodyHandlers.discarding()); if (httpResponse.statusCode() == HttpURLConnection.HTTP_OK) { return FormValidation.ok(); } @@ -146,20 +149,19 @@ public FormValidation doCheckUrl(@QueryParameter String value) throws Interrupte return FormValidation.error(e, Messages.ZipExtractionInstaller_could_not_connect()); } } - } /** * Sets execute permission on all files, since unzip etc. might not do this. - * Hackish, is there a better way? */ static class ChmodRecAPlusX extends MasterToSlaveFileCallable { private static final long serialVersionUID = 1L; @Override public Void invoke(File d, VirtualChannel channel) throws IOException { - if (!Functions.isWindows()) + if (!Functions.isWindows()) { process(d); + } return null; } @@ -176,5 +178,4 @@ private void process(File f) { } } } - }