| // Copyright 2018 PDFium Authors. All rights reserved. | |
| // 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(CPDF_MetadataTest, CheckSharedFormEmailAtTopLevel) { | |
| static const char data[] = | |
| "<?xml charset=\"utf-8\"?>\n" | |
| "<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n" | |
| "<adhocwf:workflowType>0</adhocwf:workflowType>\n" | |
| "<adhocwf:version>1.1</adhocwf:version>\n" | |
| "</node>"; | |
| auto stream = pdfium::MakeRetain<CPDF_Stream>(); | |
| stream->SetData(ByteStringView(data).raw_span()); | |
| CPDF_Metadata metadata(stream.Get()); | |
| auto results = metadata.CheckForSharedForm(); | |
| ASSERT_EQ(1U, results.size()); | |
| EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormEmail, results[0]); | |
| } | |
| TEST(CPDF_MetadataTest, CheckSharedFormAcrobatAtTopLevel) { | |
| static const char data[] = | |
| "<?xml charset=\"utf-8\"?>\n" | |
| "<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n" | |
| "<adhocwf:workflowType>1</adhocwf:workflowType>\n" | |
| "<adhocwf:version>1.1</adhocwf:version>\n" | |
| "</node>"; | |
| auto stream = pdfium::MakeRetain<CPDF_Stream>(); | |
| stream->SetData(ByteStringView(data).raw_span()); | |
| CPDF_Metadata metadata(stream.Get()); | |
| auto results = metadata.CheckForSharedForm(); | |
| ASSERT_EQ(1U, results.size()); | |
| EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormAcrobat, results[0]); | |
| } | |
| TEST(CPDF_MetadataTest, CheckSharedFormFilesystemAtTopLevel) { | |
| static const char data[] = | |
| "<?xml charset=\"utf-8\"?>\n" | |
| "<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n" | |
| "<adhocwf:workflowType>2</adhocwf:workflowType>\n" | |
| "<adhocwf:version>1.1</adhocwf:version>\n" | |
| "</node>"; | |
| auto stream = pdfium::MakeRetain<CPDF_Stream>(); | |
| stream->SetData(ByteStringView(data).raw_span()); | |
| CPDF_Metadata metadata(stream.Get()); | |
| auto results = metadata.CheckForSharedForm(); | |
| ASSERT_EQ(1U, results.size()); | |
| EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormFilesystem, results[0]); | |
| } | |
| TEST(CPDF_MetadataTest, CheckSharedFormWithoutWorkflow) { | |
| static const char data[] = | |
| "<?xml charset=\"utf-8\"?>\n" | |
| "<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n" | |
| "<adhocwf:state>2</adhocwf:state>\n" | |
| "<adhocwf:version>1.1</adhocwf:version>\n" | |
| "</node>"; | |
| auto stream = pdfium::MakeRetain<CPDF_Stream>(); | |
| stream->SetData(ByteStringView(data).raw_span()); | |
| CPDF_Metadata metadata(stream.Get()); | |
| auto results = metadata.CheckForSharedForm(); | |
| EXPECT_EQ(0U, results.size()); | |
| } | |
| TEST(CPDF_MetadataTest, CheckSharedFormAsChild) { | |
| static const char data[] = | |
| "<?xml charset=\"utf-8\"?>\n" | |
| "<grandparent><parent>\n" | |
| "<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n" | |
| "<adhocwf:workflowType>0</adhocwf:workflowType>\n" | |
| "<adhocwf:version>1.1</adhocwf:version>\n" | |
| "</node>" | |
| "</parent></grandparent>"; | |
| auto stream = pdfium::MakeRetain<CPDF_Stream>(); | |
| stream->SetData(ByteStringView(data).raw_span()); | |
| CPDF_Metadata metadata(stream.Get()); | |
| auto results = metadata.CheckForSharedForm(); | |
| ASSERT_EQ(1U, results.size()); | |
| EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormEmail, results[0]); | |
| } | |
| TEST(CPDF_MetadataTest, CheckSharedFormAsNoAdhoc) { | |
| static const char data[] = | |
| "<?xml charset=\"utf-8\"?>\n" | |
| "<node></node>"; | |
| auto stream = pdfium::MakeRetain<CPDF_Stream>(); | |
| stream->SetData(ByteStringView(data).raw_span()); | |
| CPDF_Metadata metadata(stream.Get()); | |
| auto results = metadata.CheckForSharedForm(); | |
| EXPECT_EQ(0U, results.size()); | |
| } | |
| TEST(CPDF_MetadataTest, CheckSharedFormWrongNamespace) { | |
| static const char data[] = | |
| "<?xml charset=\"utf-8\"?>\n" | |
| "<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/2.0/\">\n" | |
| "<adhocwf:workflowType>1</adhocwf:workflowType>\n" | |
| "<adhocwf:version>1.1</adhocwf:version>\n" | |
| "</node>"; | |
| auto stream = pdfium::MakeRetain<CPDF_Stream>(); | |
| stream->SetData(ByteStringView(data).raw_span()); | |
| CPDF_Metadata metadata(stream.Get()); | |
| auto results = metadata.CheckForSharedForm(); | |
| EXPECT_EQ(0U, results.size()); | |
| } | |
| TEST(CPDF_MetadataTest, CheckSharedFormMultipleErrors) { | |
| static const char data[] = | |
| "<?xml charset=\"utf-8\"?>\n" | |
| "<grandparent>" | |
| "<parent>\n" | |
| "<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n" | |
| "<adhocwf:workflowType>0</adhocwf:workflowType>\n" | |
| "<adhocwf:version>1.1</adhocwf:version>\n" | |
| "</node>" | |
| "</parent>" | |
| "<node2 " | |
| "xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n" | |
| "<adhocwf:workflowType>2</adhocwf:workflowType>\n" | |
| "<adhocwf:version>1.1</adhocwf:version>\n" | |
| "</node2>" | |
| "<node3 " | |
| "xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n" | |
| "<adhocwf:workflowType>1</adhocwf:workflowType>\n" | |
| "<adhocwf:version>1.1</adhocwf:version>\n" | |
| "</node3>" | |
| "</grandparent>"; | |
| auto stream = pdfium::MakeRetain<CPDF_Stream>(); | |
| stream->SetData(ByteStringView(data).raw_span()); | |
| CPDF_Metadata metadata(stream.Get()); | |
| 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]); | |
| } |