// Copyright 2018 The PDFium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "core/fpdfdoc/cpdf_metadata.h" #include "core/fpdfapi/parser/cpdf_stream.h" #include "testing/gtest/include/gtest/gtest.h" TEST(CPDFMetadataTest, CheckSharedFormEmailAtTopLevel) { static const char data[] = "\n" "\n" "0\n" "1.1\n" ""; auto stream = pdfium::MakeRetain(ByteStringView(data).unsigned_span()); CPDF_Metadata metadata(stream); auto results = metadata.CheckForSharedForm(); ASSERT_EQ(1U, results.size()); EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormEmail, results[0]); } TEST(CPDFMetadataTest, CheckSharedFormAcrobatAtTopLevel) { static const char data[] = "\n" "\n" "1\n" "1.1\n" ""; auto stream = pdfium::MakeRetain(ByteStringView(data).unsigned_span()); CPDF_Metadata metadata(stream); auto results = metadata.CheckForSharedForm(); ASSERT_EQ(1U, results.size()); EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormAcrobat, results[0]); } TEST(CPDFMetadataTest, CheckSharedFormFilesystemAtTopLevel) { static const char data[] = "\n" "\n" "2\n" "1.1\n" ""; auto stream = pdfium::MakeRetain(ByteStringView(data).unsigned_span()); CPDF_Metadata metadata(stream); auto results = metadata.CheckForSharedForm(); ASSERT_EQ(1U, results.size()); EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormFilesystem, results[0]); } TEST(CPDFMetadataTest, CheckSharedFormWithoutWorkflow) { static const char data[] = "\n" "\n" "2\n" "1.1\n" ""; auto stream = pdfium::MakeRetain(ByteStringView(data).unsigned_span()); CPDF_Metadata metadata(stream); auto results = metadata.CheckForSharedForm(); EXPECT_EQ(0U, results.size()); } TEST(CPDFMetadataTest, CheckSharedFormAsChild) { static const char data[] = "\n" "\n" "\n" "0\n" "1.1\n" "" ""; auto stream = pdfium::MakeRetain(ByteStringView(data).unsigned_span()); CPDF_Metadata metadata(stream); auto results = metadata.CheckForSharedForm(); ASSERT_EQ(1U, results.size()); EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormEmail, results[0]); } TEST(CPDFMetadataTest, CheckSharedFormAsNoAdhoc) { static const char data[] = "\n" ""; auto stream = pdfium::MakeRetain(ByteStringView(data).unsigned_span()); CPDF_Metadata metadata(stream); auto results = metadata.CheckForSharedForm(); EXPECT_EQ(0U, results.size()); } TEST(CPDFMetadataTest, CheckSharedFormExceedMaxDepth) { // Node has the depth of 130, which exceeds the maximum node depth of // `kMaxMetaDataDepth`. static const char kData[] = "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "\n" "0\n" "1.1\n" "" ""; auto stream = pdfium::MakeRetain(ByteStringView(kData).unsigned_span()); CPDF_Metadata metadata(stream); auto results = metadata.CheckForSharedForm(); ASSERT_EQ(0U, results.size()); } TEST(CPDFMetadataTest, CheckSharedFormWrongNamespace) { static const char data[] = "\n" "\n" "1\n" "1.1\n" ""; auto stream = pdfium::MakeRetain(ByteStringView(data).unsigned_span()); CPDF_Metadata metadata(stream); auto results = metadata.CheckForSharedForm(); EXPECT_EQ(0U, results.size()); } TEST(CPDFMetadataTest, CheckSharedFormMultipleErrors) { static const char data[] = "\n" "" "\n" "\n" "0\n" "1.1\n" "" "" "\n" "2\n" "1.1\n" "" "\n" "1\n" "1.1\n" "" ""; auto stream = pdfium::MakeRetain(ByteStringView(data).unsigned_span()); CPDF_Metadata metadata(stream); auto results = metadata.CheckForSharedForm(); ASSERT_EQ(3U, results.size()); EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormEmail, results[0]); EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormFilesystem, results[1]); EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormAcrobat, results[2]); }