diff --git a/app/lib/commons-io-2.6.jar b/app/lib/commons-io-2.6.jar new file mode 100644 index 000000000..00556b119 Binary files /dev/null and b/app/lib/commons-io-2.6.jar differ diff --git a/arduino-core/lib/commons-io-2.6.jar b/arduino-core/lib/commons-io-2.6.jar new file mode 100644 index 000000000..00556b119 Binary files /dev/null and b/arduino-core/lib/commons-io-2.6.jar differ diff --git a/arduino-core/src/cc/arduino/contributions/DownloadableContributionsDownloader.java b/arduino-core/src/cc/arduino/contributions/DownloadableContributionsDownloader.java index 3e3a7b7ce..170c5c6da 100644 --- a/arduino-core/src/cc/arduino/contributions/DownloadableContributionsDownloader.java +++ b/arduino-core/src/cc/arduino/contributions/DownloadableContributionsDownloader.java @@ -33,6 +33,7 @@ import cc.arduino.utils.FileHash; import cc.arduino.utils.MultiStepProgress; import cc.arduino.utils.Progress; import cc.arduino.utils.network.FileDownloader; +import org.apache.commons.io.FilenameUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import processing.app.BaseNoGui; @@ -147,13 +148,13 @@ public class DownloadableContributionsDownloader { public void downloadIndexAndSignature(MultiStepProgress progress, URL packageIndexUrl, ProgressListener progressListener, SignatureVerifier signatureVerifier) throws Exception { // Extract the file name from the url - String[] urlPathParts = packageIndexUrl.getFile().split("/"); - File packageIndex = BaseNoGui.indexer.getIndexFile(urlPathParts[urlPathParts.length - 1]); + String indexFileName = FilenameUtils.getName(packageIndexUrl.getPath()); + File packageIndex = BaseNoGui.indexer.getIndexFile(indexFileName); final String statusText = tr("Downloading platforms index..."); // Create temp files - File packageIndexTemp = File.createTempFile(packageIndexUrl.getPath(), ".tmp"); + File packageIndexTemp = File.createTempFile(indexFileName, ".tmp"); try { // Download package index download(packageIndexUrl, packageIndexTemp, progress, statusText, progressListener, true); @@ -195,10 +196,11 @@ public class DownloadableContributionsDownloader { public boolean checkSignature(MultiStepProgress progress, URL signatureUrl, ProgressListener progressListener, SignatureVerifier signatureVerifier, String statusText, File fileToVerify) throws Exception { - File packageIndexSignatureTemp = File.createTempFile(signatureUrl.getPath(), ".tmp"); // Signature file name - String[] urlPathParts = signatureUrl.getFile().split("/"); - File packageIndexSignature = BaseNoGui.indexer.getIndexFile(urlPathParts[urlPathParts.length - 1]); + String signatureFileName = FilenameUtils.getName(signatureUrl.getPath()); + File packageIndexSignature = BaseNoGui.indexer.getIndexFile(signatureFileName); + File packageIndexSignatureTemp = File.createTempFile(signatureFileName, ".tmp"); + try { // Download signature diff --git a/arduino-core/src/cc/arduino/contributions/GZippedJsonDownloader.java b/arduino-core/src/cc/arduino/contributions/GZippedJsonDownloader.java index 0eb53fc25..010a0a863 100644 --- a/arduino-core/src/cc/arduino/contributions/GZippedJsonDownloader.java +++ b/arduino-core/src/cc/arduino/contributions/GZippedJsonDownloader.java @@ -34,6 +34,7 @@ import cc.arduino.utils.Progress; import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream; import org.apache.commons.compress.compressors.gzip.GzipUtils; import org.apache.commons.compress.utils.IOUtils; +import org.apache.commons.io.FilenameUtils; import java.io.*; import java.net.URL; @@ -54,7 +55,8 @@ public class GZippedJsonDownloader { public void download(File tmpFile, Progress progress, String statusText, ProgressListener progressListener) throws Exception { File gzipTmpFile = null; try { - gzipTmpFile = File.createTempFile(new URL(Constants.LIBRARY_INDEX_URL_GZ).getPath(), GzipUtils.getCompressedFilename(tmpFile.getName())); + String tmpFileName = FilenameUtils.getName(new URL(Constants.LIBRARY_INDEX_URL_GZ).getPath()); + gzipTmpFile = File.createTempFile(tmpFileName, GzipUtils.getCompressedFilename(tmpFile.getName())); // remove eventual leftovers from previous downloads Files.deleteIfExists(gzipTmpFile.toPath()); diff --git a/arduino-core/src/cc/arduino/contributions/libraries/LibraryInstaller.java b/arduino-core/src/cc/arduino/contributions/libraries/LibraryInstaller.java index 94c16086b..a9722c2ca 100644 --- a/arduino-core/src/cc/arduino/contributions/libraries/LibraryInstaller.java +++ b/arduino-core/src/cc/arduino/contributions/libraries/LibraryInstaller.java @@ -36,6 +36,7 @@ import cc.arduino.contributions.GZippedJsonDownloader; import cc.arduino.contributions.ProgressListener; import cc.arduino.utils.ArchiveExtractor; import cc.arduino.utils.MultiStepProgress; +import org.apache.commons.io.FilenameUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import processing.app.BaseNoGui; @@ -70,7 +71,8 @@ public class LibraryInstaller { // Step 1: Download index File outputFile = BaseNoGui.librariesIndexer.getIndexFile(); // Create temp files - File libraryIndexTemp = File.createTempFile(new URL(Constants.LIBRARY_INDEX_URL).getPath(), ".tmp"); + String signatureFileName = FilenameUtils.getName(new URL(Constants.LIBRARY_INDEX_URL).getPath()); + File libraryIndexTemp = File.createTempFile(signatureFileName, ".tmp"); final URL libraryURL = new URL(Constants.LIBRARY_INDEX_URL); final String statusText = tr("Downloading libraries index..."); try { diff --git a/arduino-core/src/cc/arduino/contributions/packages/ContributionInstaller.java b/arduino-core/src/cc/arduino/contributions/packages/ContributionInstaller.java index e26bb6c20..a8bf08f09 100644 --- a/arduino-core/src/cc/arduino/contributions/packages/ContributionInstaller.java +++ b/arduino-core/src/cc/arduino/contributions/packages/ContributionInstaller.java @@ -41,6 +41,7 @@ import org.apache.commons.exec.CommandLine; import org.apache.commons.exec.DefaultExecutor; import org.apache.commons.exec.Executor; import org.apache.commons.exec.PumpStreamHandler; +import org.apache.commons.io.FilenameUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import processing.app.BaseNoGui; @@ -298,8 +299,8 @@ public class ContributionInstaller { try { // Extract the file name from the URL final URL packageIndexURL = new URL(packageIndexURLString); - String[] urlPathParts = packageIndexURL.getPath().split("/"); - downloadedPackageIndexFilesAccumulator.add(BaseNoGui.indexer.getIndexFile(urlPathParts[urlPathParts.length - 1]).getName()); + String indexFileName = FilenameUtils.getName(packageIndexURL.getPath()); + downloadedPackageIndexFilesAccumulator.add(BaseNoGui.indexer.getIndexFile(indexFileName).getName()); log.info("Start download and signature check of={}", packageIndexURLs); downloader.downloadIndexAndSignature(progress, packageIndexURL, progressListener, signatureVerifier); diff --git a/build/windows/launcher/config.xml b/build/windows/launcher/config.xml index 3d49f1890..1eb5a54ec 100644 --- a/build/windows/launcher/config.xml +++ b/build/windows/launcher/config.xml @@ -36,6 +36,7 @@ %EXEDIR%/lib/commons-lang3-3.8.1.jar %EXEDIR%/lib/commons-logging-1.0.4.jar %EXEDIR%/lib/commons-net-3.3.jar + %EXEDIR%/lib/commons-io-2.6.jar %EXEDIR%/lib/jackson-annotations-2.9.5.jar %EXEDIR%/lib/jackson-core-2.9.5.jar %EXEDIR%/lib/jackson-databind-2.9.5.jar diff --git a/build/windows/launcher/config_debug.xml b/build/windows/launcher/config_debug.xml index 170ccc5f8..83d2d06f4 100644 --- a/build/windows/launcher/config_debug.xml +++ b/build/windows/launcher/config_debug.xml @@ -36,6 +36,7 @@ %EXEDIR%/lib/commons-lang3-3.8.1.jar %EXEDIR%/lib/commons-logging-1.0.4.jar %EXEDIR%/lib/commons-net-3.3.jar + %EXEDIR%/lib/commons-io-2.6.jar %EXEDIR%/lib/jackson-annotations-2.9.5.jar %EXEDIR%/lib/jackson-core-2.9.5.jar %EXEDIR%/lib/jackson-databind-2.9.5.jar