diff --git a/tests/component/verifier_test.cpp b/tests/component/verifier_test.cpp index 33aadb3f..8d8b461c 100644 --- a/tests/component/verifier_test.cpp +++ b/tests/component/verifier_test.cpp @@ -155,4 +155,5 @@ INSTANTIATE_TEST_CASE_P(BadPackage, VerifierFailureTest, std::vector({"random.zip", "v1"}), std::vector({"fake-eocd.zip", "v1"}), std::vector({"alter-metadata.zip", "v1"}), - std::vector({"alter-footer.zip", "v1"}))); + std::vector({"alter-footer.zip", "v1"}), + std::vector({"signature-boundary.zip", "v1"}))); diff --git a/tests/testdata/signature-boundary.zip b/tests/testdata/signature-boundary.zip new file mode 100644 index 00000000..64a3cfa1 Binary files /dev/null and b/tests/testdata/signature-boundary.zip differ diff --git a/verifier.cpp b/verifier.cpp index 44098f70..82454867 100644 --- a/verifier.cpp +++ b/verifier.cpp @@ -147,6 +147,12 @@ int verify_file(unsigned char* addr, size_t length, LOG(INFO) << "comment is " << comment_size << " bytes; signature is " << signature_start << " bytes from end"; + if (signature_start > comment_size) { + LOG(ERROR) << "signature start: " << signature_start << " is larger than comment size: " + << comment_size; + return VERIFY_FAILURE; + } + if (signature_start <= FOOTER_SIZE) { LOG(ERROR) << "Signature start is in the footer"; return VERIFY_FAILURE;