diff --git a/src/main/java/cz/it4i/qcmp/cache/QuantizationCacheManager.java b/src/main/java/cz/it4i/qcmp/cache/QuantizationCacheManager.java index 9665e73ad4c2f2e87fc6cb45453aceb830c1d136..6142f1e5c20669616498d0785c509a637c6e62db 100644 --- a/src/main/java/cz/it4i/qcmp/cache/QuantizationCacheManager.java +++ b/src/main/java/cz/it4i/qcmp/cache/QuantizationCacheManager.java @@ -317,7 +317,7 @@ public class QuantizationCacheManager { return; } if (!qvcFile.getHeader().validateHeader()) { - System.err.println("Provided file is corrupted."); + System.err.println("Provided file is corrupted. Header is not valid."); return; } final StringBuilder reportBuilder = new StringBuilder(); diff --git a/src/main/java/cz/it4i/qcmp/fileformat/QvcHeaderV1.java b/src/main/java/cz/it4i/qcmp/fileformat/QvcHeaderV1.java index 5fc30acf6c935edfb49894853e71b2213f0d4df2..fa602b971614d20dd71ffe2f3623adeebec780c0 100644 --- a/src/main/java/cz/it4i/qcmp/fileformat/QvcHeaderV1.java +++ b/src/main/java/cz/it4i/qcmp/fileformat/QvcHeaderV1.java @@ -1,5 +1,6 @@ package cz.it4i.qcmp.fileformat; +import cz.it4i.qcmp.U16; import cz.it4i.qcmp.data.V2i; import cz.it4i.qcmp.data.V3i; import cz.it4i.qcmp.io.RawDataIO; @@ -17,7 +18,6 @@ public class QvcHeaderV1 implements IQvcHeader { //endregion //region Header fields. - protected String magicValue; protected QuantizationType quantizationType; protected int codebookSize; protected int trainFileNameSize; @@ -40,7 +40,19 @@ public class QvcHeaderV1 implements IQvcHeader { @Override public boolean validateHeader() { - return (magicValue != null && magicValue.equals(MAGIC_VALUE)); + if (!quantizationType.isOneOf(QuantizationType.Scalar, + QuantizationType.Vector1D, + QuantizationType.Vector2D, + QuantizationType.Vector3D)) + return false; + + if (!U16.isInRange(codebookSize)) + return false; + + if (!U16.isInRange(trainFileNameSize) || trainFileName.length() != trainFileNameSize) + return false; + + return U16.isInRange(vectorSizeX) && U16.isInRange(vectorSizeY) && U16.isInRange(vectorSizeZ); } /** diff --git a/src/main/java/cz/it4i/qcmp/fileformat/QvcHeaderV2.java b/src/main/java/cz/it4i/qcmp/fileformat/QvcHeaderV2.java index a8e6e36113018fba3aaab267b01ea840148f1620..b3d83e429b8e981220f5f246933e450d71b6dde5 100644 --- a/src/main/java/cz/it4i/qcmp/fileformat/QvcHeaderV2.java +++ b/src/main/java/cz/it4i/qcmp/fileformat/QvcHeaderV2.java @@ -1,5 +1,7 @@ package cz.it4i.qcmp.fileformat; +import cz.it4i.qcmp.U16; + import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; @@ -29,7 +31,8 @@ public class QvcHeaderV2 extends QvcHeaderV1 { @Override public boolean validateHeader() { - return (magicValue != null && magicValue.equals(MAGIC_VALUE)); + final boolean v1HeaderValidation = super.validateHeader(); + return U16.isInRange(huffmanDataSize) && v1HeaderValidation; } @Override