mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-27 02:51:57 +02:00
Check file size on tar input path and use stream copying instead of buffering fully
This commit is contained in:
@@ -100,11 +100,7 @@ public class Tar {
|
||||
continue;
|
||||
}
|
||||
long size = e.getSize();
|
||||
Preconditions.checkArgument(
|
||||
size >= 0 && size <= Integer.MAX_VALUE,
|
||||
"file too big (" + size + " B): " +
|
||||
"tarTo should have thrown an IOException"
|
||||
);
|
||||
checkFileSize(size);
|
||||
try (OutputStream out = new FileOutputStream(f)) {
|
||||
/* TarInputStream pretends each
|
||||
entry's EOF is the stream's EOF */
|
||||
@@ -113,6 +109,14 @@ public class Tar {
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkFileSize(long size) {
|
||||
Preconditions.checkArgument(
|
||||
size >= 0 && size <= Integer.MAX_VALUE,
|
||||
"file too big (" + size + " B): " +
|
||||
"tarTo should have thrown an IOException"
|
||||
);
|
||||
}
|
||||
|
||||
private static void addTarEntry(
|
||||
TarArchiveOutputStream tout,
|
||||
Path base,
|
||||
@@ -151,13 +155,19 @@ public class Tar {
|
||||
Path base,
|
||||
File file
|
||||
) throws IOException {
|
||||
Preconditions.checkArgument(file.isFile());
|
||||
Preconditions.checkArgument(
|
||||
file.isFile(),
|
||||
"given file" +
|
||||
" is not file: %s", file);
|
||||
checkFileSize(file.length());
|
||||
String name = base.relativize(
|
||||
Paths.get(file.getAbsolutePath())
|
||||
).toString();
|
||||
ArchiveEntry entry = tout.createArchiveEntry(file, name);
|
||||
tout.putArchiveEntry(entry);
|
||||
tout.write(FileUtils.readFileToByteArray(file));
|
||||
try (InputStream in = new FileInputStream(file)) {
|
||||
IOUtils.copy(in, tout);
|
||||
}
|
||||
tout.closeArchiveEntry();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user