From 355cb7837c4204ef345054d649fc3d584a35c9dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20L=C3=A4ubrich?= Date: Tue, 11 Jun 2024 09:58:54 +0200 Subject: [PATCH] Prevent NPE when no artifact repository is given Currently RawMirrorRequest can fail if no repository is given in the descriptor and it want to log a message. P2 should be gracefully in this case and simply report the location as being unknown. --- .../p2/artifact/repository/RawMirrorRequest.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/RawMirrorRequest.java b/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/RawMirrorRequest.java index 5f1939ea05..932f717554 100644 --- a/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/RawMirrorRequest.java +++ b/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/RawMirrorRequest.java @@ -16,6 +16,7 @@ package org.eclipse.equinox.internal.p2.artifact.repository; import java.io.OutputStream; +import java.net.URI; import java.util.Collection; import java.util.Collections; import org.eclipse.core.runtime.*; @@ -95,7 +96,7 @@ protected IStatus getArtifact(IArtifactDescriptor artifactDescriptor, OutputStre if (steps.isEmpty()) { LogHelper.log(new Status(IStatus.WARNING, Activator.ID, NLS.bind(Messages.noDigestAlgorithmToVerifyDownload, artifactDescriptor.getArtifactKey(), - artifactDescriptor.getRepository().getLocation()))); + getLocation(artifactDescriptor)))); } ProcessingStep[] stepArray = steps.toArray(new ProcessingStep[steps.size()]); // TODO should probably be using createAndLink here @@ -105,4 +106,16 @@ protected IStatus getArtifact(IArtifactDescriptor artifactDescriptor, OutputStre subMon.setWorkRemaining(1); return getSourceRepository().getRawArtifact(artifactDescriptor, destination, subMon.split(1)); } + + private String getLocation(IArtifactDescriptor artifactDescriptor) { + IArtifactRepository repository = artifactDescriptor.getRepository(); + if (repository == null) { + return ""; //$NON-NLS-1$ + } + URI loc = repository.getLocation(); + if (loc == null) { + return ""; //$NON-NLS-1$ + } + return loc.toASCIIString(); + } }