From a6b18858696a4b2ad49121213628f709852a62e0 Mon Sep 17 00:00:00 2001 From: Rob Stryker Date: Wed, 13 May 2026 15:18:54 -0400 Subject: [PATCH] Fixes #740 - Add timeouts to license download to prevent hanging When license URLs are unreachable (e.g., gnu.org down), the license download would hang indefinitely. This change adds connection and read timeouts to prevent indefinite blocking. - Add 2.5 second connection timeout - Add 5 second read timeout - Use URLConnection instead of URL.openStream() to allow timeout configuration Co-Authored-By: Claude Sonnet 4.5 --- .../tools/rsp/runtime/core/model/DownloadRuntime.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/framework/bundles/org.jboss.tools.rsp.runtime.core/src/main/java/org/jboss/tools/rsp/runtime/core/model/DownloadRuntime.java b/framework/bundles/org.jboss.tools.rsp.runtime.core/src/main/java/org/jboss/tools/rsp/runtime/core/model/DownloadRuntime.java index 0533a3cab..9af5764e5 100644 --- a/framework/bundles/org.jboss.tools.rsp.runtime.core/src/main/java/org/jboss/tools/rsp/runtime/core/model/DownloadRuntime.java +++ b/framework/bundles/org.jboss.tools.rsp.runtime.core/src/main/java/org/jboss/tools/rsp/runtime/core/model/DownloadRuntime.java @@ -15,6 +15,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.net.URL; +import java.net.URLConnection; import java.util.HashMap; import org.jboss.tools.rsp.api.dao.DownloadRuntimeDescription; @@ -66,13 +67,16 @@ public String getLicense(IProgressMonitor monitor) throws CoreException { try(ByteArrayOutputStream out = new ByteArrayOutputStream()) { if (getLicenseURL() == null) return null; - + URL url = new URL(getLicenseURL()); - InputStream in = url.openStream(); + URLConnection conn = url.openConnection(); + conn.setConnectTimeout(2500); // 2.5 second connection timeout + conn.setReadTimeout(5000); // 5 second read timeout + InputStream in = conn.getInputStream(); copyWithSize(in, out, monitor, 0); return new String(out.toByteArray()); } catch (IOException e) { - throw new CoreException(new Status(IStatus.ERROR, + throw new CoreException(new Status(IStatus.ERROR, RuntimeCoreActivator.PLUGIN_ID, 0, NLS.bind(Messages.DownloadRuntime_Unable_to_fetch_license, e.getLocalizedMessage()), e)); }