147 CPDF_TestParser parser;
148 std::string test_file =
150 ASSERT_FALSE(test_file.empty());
155 {0, 15, 61, 154, 296, 374, 450}};
156 constexpr std::array<uint16_t, 7> versions = {{0, 0, 2, 4, 6, 8, 0}};
157 for (size_t i = 0; i <
std::size(offsets); ++i) {
158 EXPECT_EQ(offsets[i], GetObjInfo(parser, i).pos);
160 for (size_t i = 0; i <
std::size(versions); ++i) {
161 EXPECT_EQ(versions[i], GetObjInfo(parser, i).gennum);
166 ASSERT_TRUE(cross_ref_table);
182 static const unsigned char kXrefTable[] =
185 "0000000003 65535 f \n"
186 "0000000017 00000 n \n"
187 "0000000081 00000 n \n"
188 "0000000000 00007 f \n"
189 "0000000331 00000 n \n"
190 "0000000409 00000 n \n"
192 static constexpr auto kExpected =
fxcrt::ToArray<OffsetAndType>({
200 CPDF_TestParser parser;
201 ASSERT_TRUE(parser.InitTestFromBuffer(kXrefTable));
203 for (size_t i = 0; i <
std::size(kExpected); ++i) {
204 EXPECT_EQ(kExpected[i].offset, GetObjInfo(parser, i).pos);
205 EXPECT_EQ(kExpected[i].type, GetObjInfo(parser, i).type);
209 static const unsigned char kXrefTable[] =
212 "0000000000 65535 f \n"
214 "0000025325 00000 n \n"
216 "0000025518 00002 n \n"
217 "0000025635 00000 n \n"
219 "0000025777 00000 n \n"
221 static constexpr auto kExpected =
fxcrt::ToArray<OffsetAndType>({
236 CPDF_TestParser parser;
237 ASSERT_TRUE(parser.InitTestFromBuffer(kXrefTable));
239 for (size_t i = 0; i <
std::size(kExpected); ++i) {
240 EXPECT_EQ(kExpected[i].offset, GetObjInfo(parser, i).pos);
241 EXPECT_EQ(kExpected[i].type, GetObjInfo(parser, i).type);
245 static const unsigned char kXrefTable[] =
248 "0000000000 65535 f \n"
250 "0000025325 00000 n \n"
252 "0000000000 65535 f \n"
253 "0000025635 00000 n \n"
255 "0000025777 00000 n \n"
257 static constexpr auto kExpected =
fxcrt::ToArray<OffsetAndType>({
272 CPDF_TestParser parser;
273 ASSERT_TRUE(parser.InitTestFromBuffer(kXrefTable));
275 for (size_t i = 0; i <
std::size(kExpected); ++i) {
276 EXPECT_EQ(kExpected[i].offset, GetObjInfo(parser, i).pos);
277 EXPECT_EQ(kExpected[i].type, GetObjInfo(parser, i).type);
281 static const unsigned char kXrefTable[] =
284 "0000000002 65535 f \n"
285 "0000000023 00000 n \n"
286 "0000000003 65535 f \n"
287 "0000000004 65535 f \n"
288 "0000000000 65535 f \n"
289 "0000000045 00000 n \n"
290 "0000000179 00000 n \n"
292 static constexpr auto kExpected =
fxcrt::ToArray<OffsetAndType>({
301 CPDF_TestParser parser;
302 ASSERT_TRUE(parser.InitTestFromBuffer(kXrefTable));
304 for (size_t i = 0; i <
std::size(kExpected); ++i) {
305 EXPECT_EQ(kExpected[i].offset, GetObjInfo(parser, i).pos);
306 EXPECT_EQ(kExpected[i].type, GetObjInfo(parser, i).type);
313 std::string xref_table =
"xref \n 0 2048 \n";
314 xref_table.reserve(41000);
315 for (
int i = 0; i < 2048; ++i) {
317 snprintf(buffer,
sizeof(buffer),
"%010d 00000 n \n", i + 1);
318 xref_table += buffer;
320 xref_table +=
"trail";
321 CPDF_TestParser parser;
322 ASSERT_TRUE(parser.InitTestFromBuffer(
325 for (size_t i = 0; i < 2048; ++i) {
326 EXPECT_EQ(
static_cast<
int>(i) + 1, GetObjInfo(parser, i).pos);
328 GetObjInfo(parser, i).type);
348 static constexpr FX_FILESIZE kTestHeaderOffset = 765;
349 std::string test_file =
351 ASSERT_FALSE(test_file.empty());
353 IFX_SeekableReadStream::CreateFromFilename(test_file.c_str());
354 ASSERT_TRUE(pFileAccess);
356 std::vector<
unsigned char> data(pFileAccess->GetSize() + kTestHeaderOffset);
357 ASSERT_TRUE(pFileAccess->ReadBlockAtOffset(
358 pdfium::make_span(data).subspan(kTestHeaderOffset), 0));
359 CPDF_TestParser parser;
360 parser.InitTestFromBufferWithOffset(data, kTestHeaderOffset);
364 parser.ParseIndirectObjectAtForTesting(100940);
365 ASSERT_TRUE(cross_ref_stream_obj);
366 EXPECT_EQ(75u, cross_ref_stream_obj->GetObjNum());
370 static constexpr FX_FILESIZE kTestHeaderOffset = 765;
372 ASSERT_FALSE(test_file.empty());
374 IFX_SeekableReadStream::CreateFromFilename(test_file.c_str());
375 ASSERT_TRUE(pFileAccess);
377 std::vector<
unsigned char> data(pFileAccess->GetSize() + kTestHeaderOffset);
378 ASSERT_TRUE(pFileAccess->ReadBlockAtOffset(
379 pdfium::make_span(data).subspan(kTestHeaderOffset), 0));
381 CPDF_TestParser parser;
382 parser.InitTestFromBufferWithOffset(data, kTestHeaderOffset);
383 EXPECT_TRUE(parser.ParseLinearizedHeader());
387 ASSERT_TRUE(cross_ref_table);
433 "Unexpected kMaxObjectNumber");
434 const unsigned char kData[] =
435 "%PDF1-7\n%\xa0\xf2\xa4\xf4\n"
437 " /Filter /ASCIIHexDecode\n"
438 " /Index [4194303 3]\n"
452 ASSERT_TRUE(parser().InitTestFromBuffer(kData));
454 EXPECT_FALSE(parser().xref_table_rebuilt());
455 ASSERT_TRUE(parser().GetCrossRefTableForTesting());
456 const auto& objects_info =
457 parser().GetCrossRefTableForTesting()->objects_info();
470 EXPECT_THAT(objects_info, ElementsAre(Pair(4194303, only_valid_object),
471 Pair(4194305, placeholder_object)));
476 const unsigned char kData[] =
477 "%PDF1-7\n%\xa0\xf2\xa4\xf4\n"
479 " /Filter /ASCIIHexDecode\n"
493 ASSERT_TRUE(parser().InitTestFromBuffer(kData));
495 EXPECT_FALSE(parser().xref_table_rebuilt());
498 parser().GetCrossRefTableForTesting();
499 ASSERT_TRUE(cross_ref_table);
501 const auto& objects_info = cross_ref_table->objects_info();
510 EXPECT_THAT(objects_info, ElementsAre(Pair(1, expected_objects[0]),
511 Pair(2, expected_objects[1])));
615 const unsigned char kData[] =
616 "%PDF1-7\n%\xa0\xf2\xa4\xf4\n"
618 " /Filter /ASCIIHexDecode\n"
632 ASSERT_TRUE(parser().InitTestFromBuffer(kData));
634 EXPECT_FALSE(parser().xref_table_rebuilt());
635 ASSERT_TRUE(parser().GetCrossRefTableForTesting());
636 const auto& objects_info =
637 parser().GetCrossRefTableForTesting()->objects_info();
643 EXPECT_THAT(objects_info, ElementsAre(Pair(0, expected_result[0]),
644 Pair(1, expected_result[1])));
649 const unsigned char kData[] =
650 "%PDF1-7\n%\xa0\xf2\xa4\xf4\n"
652 " /Filter /ASCIIHexDecode\n"
655 " /Index [2 1 4 2 80 3]\n"
671 ASSERT_TRUE(parser().InitTestFromBuffer(kData));
673 EXPECT_FALSE(parser().xref_table_rebuilt());
674 ASSERT_TRUE(parser().GetCrossRefTableForTesting());
675 const auto& objects_info =
676 parser().GetCrossRefTableForTesting()->objects_info();
688 ElementsAre(Pair(2, expected_result[0]), Pair(4, expected_result[1]),
689 Pair(5, expected_result[2]), Pair(80, expected_result[3]),
690 Pair(81, expected_result[4]), Pair(82, expected_result[5])));
695 const unsigned char kData[] =
696 "%PDF1-7\n%\xa0\xf2\xa4\xf4\n"
698 " /Filter /ASCIIHexDecode\n"
701 " /Index [2 2 3 1]\n"
714 ASSERT_TRUE(parser().InitTestFromBuffer(kData));
716 EXPECT_FALSE(parser().xref_table_rebuilt());
717 ASSERT_TRUE(parser().GetCrossRefTableForTesting());
718 const auto& objects_info =
719 parser().GetCrossRefTableForTesting()->objects_info();
727 EXPECT_THAT(objects_info, ElementsAre(Pair(2, expected_result[0]),
728 Pair(3, expected_result[1])));
733 const unsigned char kData[] =
734 "%PDF1-7\n%\xa0\xf2\xa4\xf4\n"
736 " /Filter /ASCIIHexDecode\n"
739 " /Index [3 2 2 1]\n"
752 ASSERT_TRUE(parser().InitTestFromBuffer(kData));
754 EXPECT_FALSE(parser().xref_table_rebuilt());
755 ASSERT_TRUE(parser().GetCrossRefTableForTesting());
756 const auto& objects_info =
757 parser().GetCrossRefTableForTesting()->objects_info();
765 EXPECT_THAT(objects_info, ElementsAre(Pair(2, expected_result[0]),
766 Pair(3, expected_result[1]),
767 Pair(4, expected_result[2])));
773 const unsigned char kData[] =
774 "%PDF1-7\n%\xa0\xf2\xa4\xf4\n"
776 " /Filter /ASCIIHexDecode\n"
779 " /Index [2 1 80 2]\n"
792 ASSERT_TRUE(parser().InitTestFromBuffer(kData));
794 EXPECT_FALSE(parser().xref_table_rebuilt());
795 ASSERT_TRUE(parser().GetCrossRefTableForTesting());
796 const auto& objects_info =
797 parser().GetCrossRefTableForTesting()->objects_info();
804 EXPECT_THAT(objects_info, ElementsAre(Pair(2, expected_result[0]),
805 Pair(80, expected_result[1]),
806 Pair(81, expected_result[2])));