diff --git a/code/src/main/java/com/codeforces/commons/compress/ZipUtil.java b/code/src/main/java/com/codeforces/commons/compress/ZipUtil.java index ae5697d..b562a64 100644 --- a/code/src/main/java/com/codeforces/commons/compress/ZipUtil.java +++ b/code/src/main/java/com/codeforces/commons/compress/ZipUtil.java @@ -377,7 +377,7 @@ public static void unzip(File zipArchive, File destinationDirectory, @Nullable F } File file = new File(destinationDirectory, fileHeader.getFileName()).getCanonicalFile(); - if (!file.toPath().normalize().startsWith(destinationDirectory.toPath().normalize())) { + if (!file.getAbsolutePath().startsWith(destinationDirectory.getCanonicalPath())) { throw new IOException("ZIP entry tries to escape destination directory: " + fileHeader.getFileName()); } @@ -392,12 +392,8 @@ public static void unzip(File zipArchive, File destinationDirectory, @Nullable F if (maxSize <= MAX_ZIP_ENTRY_SIZE) { File parentDir = file.getParentFile(); - - try { - Files.createDirectories(parentDir.toPath()); - } catch (Exception e) { - throw new IOException("Failed to create parent directory: '" - + parentDir.getAbsolutePath() + "'.", e); + if (!parentDir.exists() && !parentDir.mkdirs()) { + throw new IOException("Failed to create parent directory: " + parentDir.getAbsolutePath()); } Files.deleteIfExists(file.toPath());