From e0775238b8b011755b9682555a8449b8a71f33eb Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Fri, 10 Sep 2021 00:05:48 +0200 Subject: [PATCH] Fix QPDFEFStreamObjectHelper::{get,set}Subtype The /Subtype entry that specifies the mime type of an embedded file is inside the embedded file stream dictionary directly, not it in the parameter dictionary. See Table 45 and 46 in the PDF 1.7 specification: https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf#page=112 --- examples/qtest/attach-file/output.pdf | Bin 5287 -> 5285 bytes libqpdf/QPDFEFStreamObjectHelper.cc | 5 ++-- qpdf/qtest/qpdf/add-attachments-1.pdf | 22 +++++++-------- qpdf/qtest/qpdf/copy-attachments-2.pdf | 36 ++++++++++++------------- qpdf/qtest/qpdf/test76.pdf | 26 +++++++++--------- qpdf/qtest/qpdf/test77.pdf | 20 +++++++------- 6 files changed, 55 insertions(+), 54 deletions(-) diff --git a/examples/qtest/attach-file/output.pdf b/examples/qtest/attach-file/output.pdf index d41cef4fc15f46956f23e182329d3c8a3ddc8971..ab09055c1abdda4f4a7bef7f7ce16e87d1794455 100644 GIT binary patch delta 360 zcmZ3kxm0sQD6^EE9hZWFesF10No7H*f_`RhVtT5wQCdM>`sPCBWBm073I-sckf*=} zW*8WoSr}r7Sprp{sWUM!GQt!y!4xwzw8T(nWCS%Y4q>s0kqM?H#-^B>jV(FJDaA0w*vK?3$t1N|~nWd%K*$`9_%LNR_;*!Lo Vl8U0#G%gc!V+$@-RabvEE&wVSQsV#s delta 348 zcmZ3gxmvQb(=UOJb8f}P#weCA{P8b%5RAfS+^ zzy)R)7@JubV~ANAOfD1_t~WA4moYIg!4xwzGQ?14WQ1XpiIEAWn6VkAUSmshuzAWz z&NMMIz*J~vWH?z!#4Og>)X3Pt3J63q=vjSNgJlFSSejZ7@flI&~^a}0LN5J5&!@I diff --git a/libqpdf/QPDFEFStreamObjectHelper.cc b/libqpdf/QPDFEFStreamObjectHelper.cc index 47df9657..71e13cb2 100644 --- a/libqpdf/QPDFEFStreamObjectHelper.cc +++ b/libqpdf/QPDFEFStreamObjectHelper.cc @@ -76,7 +76,7 @@ QPDFEFStreamObjectHelper::getSize() std::string QPDFEFStreamObjectHelper::getSubtype() { - auto val = getParam("/Subtype"); + auto val = this->oh.getDict().getKey("/Subtype"); if (val.isName()) { auto n = val.getName(); @@ -141,7 +141,8 @@ QPDFEFStreamObjectHelper::setModDate(std::string const& date) QPDFEFStreamObjectHelper& QPDFEFStreamObjectHelper::setSubtype(std::string const& subtype) { - setParam("/Subtype", QPDFObjectHandle::newName("/" + subtype)); + this->oh.getDict().replaceKey( + "/Subtype", QPDFObjectHandle::newName("/" + subtype)); return *this; } diff --git a/qpdf/qtest/qpdf/add-attachments-1.pdf b/qpdf/qtest/qpdf/add-attachments-1.pdf index 9605188f..172f617d 100644 --- a/qpdf/qtest/qpdf/add-attachments-1.pdf +++ b/qpdf/qtest/qpdf/add-attachments-1.pdf @@ -101,8 +101,8 @@ endobj /CreationDate (D:20210210091359-05'00') /ModDate (D:20210210141359Z) /Size 12 - /Subtype /text#2fplain >> + /Subtype /text#2fplain /Type /EmbeddedFile /Length 9 0 R >> @@ -204,20 +204,20 @@ xref 0000000587 00000 n 0000000709 00000 n 0000000904 00000 n -0000001199 00000 n -0000001218 00000 n -0000001488 00000 n -0000001508 00000 n -0000001778 00000 n -0000001821 00000 n -0000001922 00000 n -0000001942 00000 n -0000002061 00000 n +0000001197 00000 n +0000001216 00000 n +0000001486 00000 n +0000001506 00000 n +0000001776 00000 n +0000001819 00000 n +0000001920 00000 n +0000001940 00000 n +0000002059 00000 n trailer << /Root 1 0 R /Size 18 /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] >> startxref -2097 +2095 %%EOF diff --git a/qpdf/qtest/qpdf/copy-attachments-2.pdf b/qpdf/qtest/qpdf/copy-attachments-2.pdf index a2f29598..83a873c2 100644 --- a/qpdf/qtest/qpdf/copy-attachments-2.pdf +++ b/qpdf/qtest/qpdf/copy-attachments-2.pdf @@ -144,8 +144,8 @@ endobj /CreationDate (D:20210210091359-05'00') /ModDate (D:20210210141359Z) /Size 12 - /Subtype /text#2fplain >> + /Subtype /text#2fplain /Type /EmbeddedFile /Length 12 0 R >> @@ -208,8 +208,8 @@ endobj /CreationDate (D:20210210091359-05'00') /ModDate (D:20210210141359Z) /Size 12 - /Subtype /text#2fplain >> + /Subtype /text#2fplain /Type /EmbeddedFile /Length 18 0 R >> @@ -314,26 +314,26 @@ xref 0000001039 00000 n 0000001161 00000 n 0000001357 00000 n -0000001654 00000 n -0000001674 00000 n -0000001944 00000 n -0000001964 00000 n -0000002234 00000 n -0000002254 00000 n -0000002551 00000 n -0000002571 00000 n -0000002841 00000 n -0000002861 00000 n -0000003131 00000 n -0000003174 00000 n -0000003275 00000 n -0000003295 00000 n -0000003414 00000 n +0000001652 00000 n +0000001672 00000 n +0000001942 00000 n +0000001962 00000 n +0000002232 00000 n +0000002252 00000 n +0000002547 00000 n +0000002567 00000 n +0000002837 00000 n +0000002857 00000 n +0000003127 00000 n +0000003170 00000 n +0000003271 00000 n +0000003291 00000 n +0000003410 00000 n trailer << /Root 1 0 R /Size 27 /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] >> startxref -3450 +3446 %%EOF diff --git a/qpdf/qtest/qpdf/test76.pdf b/qpdf/qtest/qpdf/test76.pdf index d81d03f7..02d2d5cb 100644 --- a/qpdf/qtest/qpdf/test76.pdf +++ b/qpdf/qtest/qpdf/test76.pdf @@ -108,8 +108,8 @@ endobj /CreationDate (D:20210207191121-05'00') /ModDate (D:20210208001122Z) /Size 9 - /Subtype /text#2fplain >> + /Subtype /text#2fplain /Type /EmbeddedFile /Length 9 0 R >> @@ -129,8 +129,8 @@ endobj /Params << /CheckSum <2fce9c8228e360ba9b04a1bd1bf63d6b> /Size 11 - /Subtype /text#2fplain >> + /Subtype /text#2fplain /Type /EmbeddedFile /Length 11 0 R >> @@ -150,8 +150,8 @@ endobj /Params << /CheckSum <2236c155b1d62b7f00285bba081d4336> /Size 11 - /Subtype /text#2fplain >> + /Subtype /text#2fplain /Type /EmbeddedFile /Length 13 0 R >> @@ -214,20 +214,20 @@ xref 0000000707 00000 n 0000000876 00000 n 0000001098 00000 n -0000001389 00000 n -0000001435 00000 n -0000001654 00000 n -0000001702 00000 n -0000001921 00000 n -0000001991 00000 n -0000002092 00000 n -0000002139 00000 n -0000002285 00000 n +0000001387 00000 n +0000001433 00000 n +0000001650 00000 n +0000001698 00000 n +0000001915 00000 n +0000001985 00000 n +0000002086 00000 n +0000002133 00000 n +0000002279 00000 n trailer << /Root 1 0 R /Size 18 /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] >> startxref -2321 +2315 %%EOF diff --git a/qpdf/qtest/qpdf/test77.pdf b/qpdf/qtest/qpdf/test77.pdf index 4aa01abf..468db017 100644 --- a/qpdf/qtest/qpdf/test77.pdf +++ b/qpdf/qtest/qpdf/test77.pdf @@ -93,8 +93,8 @@ endobj /CreationDate (D:20210207191121-05'00') /ModDate (D:20210208001122Z) /Size 9 - /Subtype /text#2fplain >> + /Subtype /text#2fplain /Type /EmbeddedFile /Length 8 0 R >> @@ -114,8 +114,8 @@ endobj /Params << /CheckSum <2236c155b1d62b7f00285bba081d4336> /Size 11 - /Subtype /text#2fplain >> + /Subtype /text#2fplain /Type /EmbeddedFile /Length 10 0 R >> @@ -177,18 +177,18 @@ xref 0000000541 00000 n 0000000708 00000 n 0000000930 00000 n -0000001221 00000 n -0000001267 00000 n -0000001485 00000 n -0000001556 00000 n -0000001657 00000 n -0000001705 00000 n -0000001852 00000 n +0000001219 00000 n +0000001265 00000 n +0000001481 00000 n +0000001552 00000 n +0000001653 00000 n +0000001701 00000 n +0000001848 00000 n trailer << /Root 1 0 R /Size 15 /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] >> startxref -1888 +1884 %%EOF