|
14 | 14 |
|
15 | 15 | import static org.eclipse.lemminx.utils.ExceptionUtils.getRootCause; |
16 | 16 |
|
| 17 | +import java.io.FileNotFoundException; |
17 | 18 | import java.io.FileOutputStream; |
18 | 19 | import java.io.IOException; |
19 | 20 | import java.io.InputStream; |
|
26 | 27 | import java.nio.file.Files; |
27 | 28 | import java.nio.file.Path; |
28 | 29 | import java.nio.file.Paths; |
| 30 | +import java.text.MessageFormat; |
29 | 31 | import java.util.HashMap; |
30 | 32 | import java.util.HashSet; |
31 | 33 | import java.util.Map; |
@@ -165,6 +167,16 @@ public Path getResource(final String resourceURI) throws IOException { |
165 | 167 | CacheResourceDownloadingError.DOWNLOAD_DISABLED, null, null); |
166 | 168 | } |
167 | 169 |
|
| 170 | + URI resourceUriParsed = URI.create(resourceURI); |
| 171 | + if ("file".equals(resourceUriParsed.getScheme())) { |
| 172 | + // UNC path |
| 173 | + Path path = Path.of(resourceUriParsed); |
| 174 | + if (!Files.exists(path)) { |
| 175 | + throw new CacheResourceFileNotFoundException(path.toString(), "The network-accessible file '" + path.toString() + "' doesn't exist"); |
| 176 | + } |
| 177 | + return path; |
| 178 | + } |
| 179 | + |
168 | 180 | if (!FilesUtils.isIncludedInDeployedPath(resourceCachePath)) { |
169 | 181 | throw new CacheResourceDownloadingException(resourceURI, resourceCachePath, |
170 | 182 | CacheResourceDownloadingError.RESOURCE_NOT_IN_DEPLOYED_PATH, null, null); |
@@ -309,6 +321,7 @@ public static Path getResourceCachePath(String resourceURI) throws IOException { |
309 | 321 | } |
310 | 322 |
|
311 | 323 | public static Path getResourceCachePath(URI uri) throws IOException { |
| 324 | + |
312 | 325 | // Eliminate all path traversals |
313 | 326 | URI normalizedUri = uri.normalize(); |
314 | 327 |
|
|
0 commit comments