| // 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(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); |
| |
| 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); |
| |
| 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); |
| |
| 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); |
| |
| 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); |
| |
| 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); |
| |
| 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); |
| |
| 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); |
| |
| 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]); |
| } |