formatting

This commit is contained in:
Loredana Crusoveanu 2020-11-20 14:42:56 +02:00
parent ebf99bfd4f
commit f6ee5efc3f

View File

@ -8,50 +8,50 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream; import java.util.zip.ZipInputStream;
public class UnzipFile { public class UnzipFile {
public static void main(final String[] args) throws IOException { public static void main(final String[] args) throws IOException {
final String fileZip = "src/main/resources/unzipTest/compressed.zip"; final String fileZip = "src/main/resources/unzipTest/compressed.zip";
final File destDir = new File("src/main/resources/unzipTest"); final File destDir = new File("src/main/resources/unzipTest");
final byte[] buffer = new byte[1024]; final byte[] buffer = new byte[1024];
final ZipInputStream zis = new ZipInputStream(new FileInputStream(fileZip)); final ZipInputStream zis = new ZipInputStream(new FileInputStream(fileZip));
ZipEntry zipEntry = zis.getNextEntry(); ZipEntry zipEntry = zis.getNextEntry();
while (zipEntry != null) { while (zipEntry != null) {
final File newFile = newFile(destDir, zipEntry); final File newFile = newFile(destDir, zipEntry);
if (zipEntry.isDirectory()) { if (zipEntry.isDirectory()) {
if (!newFile.isDirectory() && !newFile.mkdirs()) { if (!newFile.isDirectory() && !newFile.mkdirs()) {
throw new IOException("Failed to create directory " + newFile); throw new IOException("Failed to create directory " + newFile);
} }
} else { } else {
File parent = newFile.getParentFile(); File parent = newFile.getParentFile();
if (!parent.isDirectory() && !parent.mkdirs()) { if (!parent.isDirectory() && !parent.mkdirs()) {
throw new IOException("Failed to create directory " + parent); throw new IOException("Failed to create directory " + parent);
} }
final FileOutputStream fos = new FileOutputStream(newFile); final FileOutputStream fos = new FileOutputStream(newFile);
int len; int len;
while ((len = zis.read(buffer)) > 0) { while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len); fos.write(buffer, 0, len);
} }
fos.close(); fos.close();
} }
zipEntry = zis.getNextEntry(); zipEntry = zis.getNextEntry();
} }
zis.closeEntry(); zis.closeEntry();
zis.close(); zis.close();
} }
/** /**
* @see https://snyk.io/research/zip-slip-vulnerability * @see https://snyk.io/research/zip-slip-vulnerability
*/ */
public static File newFile(File destinationDir, ZipEntry zipEntry) throws IOException { public static File newFile(File destinationDir, ZipEntry zipEntry) throws IOException {
File destFile = new File(destinationDir, zipEntry.getName()); File destFile = new File(destinationDir, zipEntry.getName());
String destDirPath = destinationDir.getCanonicalPath(); String destDirPath = destinationDir.getCanonicalPath();
String destFilePath = destFile.getCanonicalPath(); String destFilePath = destFile.getCanonicalPath();
if (!destFilePath.startsWith(destDirPath + File.separator)) { if (!destFilePath.startsWith(destDirPath + File.separator)) {
throw new IOException("Entry is outside of the target dir: " + zipEntry.getName()); throw new IOException("Entry is outside of the target dir: " + zipEntry.getName());
} }
return destFile; return destFile;
} }
} }