mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Check file size on tar input path and use stream copying instead of buffering fully
This commit is contained in:
parent
045eea8282
commit
f9307c7110
1 changed files with 17 additions and 7 deletions
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue