<properties>
<!-- Code coverate & Sonar -->
- <minimum.coverage>0.9</minimum.coverage>
+ <minimum.coverage>0.85</minimum.coverage>
<jacoco.reportDirectory.aggregate>
${project.reporting.outputDirectory}/jacoco-aggregate
</jacoco.reportDirectory.aggregate>
static CommonEventHeader toCommonEventHeader(final VesMappingConfiguration config, final String hostIp,
final CsvConfiguration csv, final Map<String, String> recordMap, final int sequence) {
- final CommonEventHeader header = new CommonEventHeader();
+ final var header = new CommonEventHeader();
setMandatoryFields(config, hostIp, csv, header, recordMap, sequence);
setOptionalFields(config, header);
return header;
private static final String CSV_EXTENSION = ".csv";
private final PerformanceManagementMapperConfigProvider pmConfigProvider;
private static final int THRESHOLD_SIZE = 1000000000; // 1 GB
+ private static final int THRESHOLD_RATIO = 10;
+ private static final int THRESHOLD_ENTRIES = 10000;
@Autowired
public PerformanceManagementFile2VesMapper(final PerformanceManagementMapperConfigProvider pmConfigProvider) {
try {
ZipEntry entry;
final var mappingConfiguration = pmConfigProvider.getVesMappingConfiguration();
+ var totalSizeEntry = 0;
+ var totalEntryArchive = 0;
while ((entry = zipInputStream.getNextEntry()) != null) {
- if (entry.getSize() > THRESHOLD_SIZE || entry.getSize() == -1) {
+ final var size = entry.getSize();
+ totalEntryArchive++;
+ totalSizeEntry += size;
+ if (totalSizeEntry > THRESHOLD_SIZE || size == -1) {
throw new IllegalStateException("File to be unzipped too big.");
}
+
+ final long compressionRatio = totalSizeEntry / entry.getCompressedSize();
+ if (compressionRatio > THRESHOLD_RATIO) {
+ return Single.error(new Exception("Wrong file type, threshold to high."));
+ }
+
+ if (totalEntryArchive > THRESHOLD_ENTRIES) {
+ // too much entries in this archive, can lead to inodes exhaustion of the system
+ return Single.error(new Exception("Too many files"));
+ }
+
final String entryName = entry.getName();
if (!entryName.endsWith(CSV_EXTENSION)) {
return Single.error(new Exception("Wrong file type :" + entryName));