mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-07 10:04:21 +00:00
Merge pull request #10929 from atmire/w2p-132206_saf-inputstream-leaks
Fix SAF Import Open connection leak
This commit is contained in:
@@ -23,6 +23,7 @@ import java.util.UUID;
|
|||||||
|
|
||||||
import org.apache.commons.cli.ParseException;
|
import org.apache.commons.cli.ParseException;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.tika.Tika;
|
import org.apache.tika.Tika;
|
||||||
import org.dspace.app.itemimport.factory.ItemImportServiceFactory;
|
import org.dspace.app.itemimport.factory.ItemImportServiceFactory;
|
||||||
@@ -334,33 +335,38 @@ public class ItemImport extends DSpaceRunnable<ItemImportScriptConfiguration> {
|
|||||||
protected void readZip(Context context, ItemImportService itemImportService) throws Exception {
|
protected void readZip(Context context, ItemImportService itemImportService) throws Exception {
|
||||||
Optional<InputStream> optionalFileStream = Optional.empty();
|
Optional<InputStream> optionalFileStream = Optional.empty();
|
||||||
Optional<InputStream> validationFileStream = Optional.empty();
|
Optional<InputStream> validationFileStream = Optional.empty();
|
||||||
if (!remoteUrl) {
|
try {
|
||||||
// manage zip via upload
|
if (!remoteUrl) {
|
||||||
optionalFileStream = handler.getFileStream(context, zipfilename);
|
// manage zip via upload
|
||||||
validationFileStream = handler.getFileStream(context, zipfilename);
|
optionalFileStream = handler.getFileStream(context, zipfilename);
|
||||||
} else {
|
validationFileStream = handler.getFileStream(context, zipfilename);
|
||||||
// manage zip via remote url
|
} else {
|
||||||
optionalFileStream = Optional.ofNullable(new URL(zipfilename).openStream());
|
// manage zip via remote url
|
||||||
validationFileStream = Optional.ofNullable(new URL(zipfilename).openStream());
|
optionalFileStream = Optional.ofNullable(new URL(zipfilename).openStream());
|
||||||
}
|
validationFileStream = Optional.ofNullable(new URL(zipfilename).openStream());
|
||||||
|
|
||||||
if (validationFileStream.isPresent()) {
|
|
||||||
// validate zip file
|
|
||||||
if (validationFileStream.isPresent()) {
|
|
||||||
validateZip(validationFileStream.get());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
workFile = new File(itemImportService.getTempWorkDir() + File.separator
|
if (validationFileStream.isPresent()) {
|
||||||
+ zipfilename + "-" + context.getCurrentUser().getID());
|
// validate zip file
|
||||||
FileUtils.copyInputStreamToFile(optionalFileStream.get(), workFile);
|
if (validationFileStream.isPresent()) {
|
||||||
} else {
|
validateZip(validationFileStream.get());
|
||||||
throw new IllegalArgumentException(
|
}
|
||||||
"Error reading file, the file couldn't be found for filename: " + zipfilename);
|
|
||||||
}
|
|
||||||
|
|
||||||
workDir = new File(itemImportService.getTempWorkDir() + File.separator + TEMP_DIR
|
workFile = new File(itemImportService.getTempWorkDir() + File.separator
|
||||||
+ File.separator + context.getCurrentUser().getID());
|
+ zipfilename + "-" + context.getCurrentUser().getID());
|
||||||
sourcedir = itemImportService.unzip(workFile, workDir.getAbsolutePath());
|
FileUtils.copyInputStreamToFile(optionalFileStream.get(), workFile);
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException(
|
||||||
|
"Error reading file, the file couldn't be found for filename: " + zipfilename);
|
||||||
|
}
|
||||||
|
|
||||||
|
workDir = new File(itemImportService.getTempWorkDir() + File.separator + TEMP_DIR
|
||||||
|
+ File.separator + context.getCurrentUser().getID());
|
||||||
|
sourcedir = itemImportService.unzip(workFile, workDir.getAbsolutePath());
|
||||||
|
} finally {
|
||||||
|
optionalFileStream.ifPresent(IOUtils::closeQuietly);
|
||||||
|
validationFileStream.ifPresent(IOUtils::closeQuietly);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -17,6 +17,7 @@ import java.util.Optional;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.dspace.app.itemimport.service.ItemImportService;
|
import org.dspace.app.itemimport.service.ItemImportService;
|
||||||
import org.dspace.content.Collection;
|
import org.dspace.content.Collection;
|
||||||
@@ -111,7 +112,11 @@ public class ItemImportCLI extends ItemImport {
|
|||||||
|
|
||||||
// validate zip file
|
// validate zip file
|
||||||
InputStream validationFileStream = new FileInputStream(myZipFile);
|
InputStream validationFileStream = new FileInputStream(myZipFile);
|
||||||
validateZip(validationFileStream);
|
try {
|
||||||
|
validateZip(validationFileStream);
|
||||||
|
} finally {
|
||||||
|
IOUtils.closeQuietly(validationFileStream);
|
||||||
|
}
|
||||||
|
|
||||||
workDir = new File(itemImportService.getTempWorkDir() + File.separator + TEMP_DIR
|
workDir = new File(itemImportService.getTempWorkDir() + File.separator + TEMP_DIR
|
||||||
+ File.separator + context.getCurrentUser().getID());
|
+ File.separator + context.getCurrentUser().getID());
|
||||||
@@ -120,22 +125,28 @@ public class ItemImportCLI extends ItemImport {
|
|||||||
} else {
|
} else {
|
||||||
// manage zip via remote url
|
// manage zip via remote url
|
||||||
Optional<InputStream> optionalFileStream = Optional.ofNullable(new URL(zipfilename).openStream());
|
Optional<InputStream> optionalFileStream = Optional.ofNullable(new URL(zipfilename).openStream());
|
||||||
if (optionalFileStream.isPresent()) {
|
Optional<InputStream> validationFileStream = Optional.ofNullable(new URL(zipfilename).openStream());
|
||||||
// validate zip file via url
|
try {
|
||||||
Optional<InputStream> validationFileStream = Optional.ofNullable(new URL(zipfilename).openStream());
|
if (optionalFileStream.isPresent()) {
|
||||||
if (validationFileStream.isPresent()) {
|
// validate zip file via url
|
||||||
validateZip(validationFileStream.get());
|
|
||||||
}
|
|
||||||
|
|
||||||
workFile = new File(itemImportService.getTempWorkDir() + File.separator
|
if (validationFileStream.isPresent()) {
|
||||||
+ zipfilename + "-" + context.getCurrentUser().getID());
|
validateZip(validationFileStream.get());
|
||||||
FileUtils.copyInputStreamToFile(optionalFileStream.get(), workFile);
|
}
|
||||||
workDir = new File(itemImportService.getTempWorkDir() + File.separator + TEMP_DIR
|
|
||||||
+ File.separator + context.getCurrentUser().getID());
|
workFile = new File(itemImportService.getTempWorkDir() + File.separator
|
||||||
sourcedir = itemImportService.unzip(workFile, workDir.getAbsolutePath());
|
+ zipfilename + "-" + context.getCurrentUser().getID());
|
||||||
} else {
|
FileUtils.copyInputStreamToFile(optionalFileStream.get(), workFile);
|
||||||
throw new IllegalArgumentException(
|
workDir = new File(itemImportService.getTempWorkDir() + File.separator + TEMP_DIR
|
||||||
"Error reading file, the file couldn't be found for filename: " + zipfilename);
|
+ File.separator + context.getCurrentUser().getID());
|
||||||
|
sourcedir = itemImportService.unzip(workFile, workDir.getAbsolutePath());
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException(
|
||||||
|
"Error reading file, the file couldn't be found for filename: " + zipfilename);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
optionalFileStream.ifPresent(IOUtils::closeQuietly);
|
||||||
|
validationFileStream.ifPresent(IOUtils::closeQuietly);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user