From c34fd5f0cc7a0b1d50f07219eb36b85af705ab03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Hern=C3=A1ndez?= Date: Tue, 27 Feb 2024 08:56:22 +0100 Subject: [PATCH] test: add test to cover /Names in catalog --- sign/pdfcatalog_test.go | 96 +++++++++++++++++++++------------------ testfiles/testfile21.pdf | Bin 0 -> 6804 bytes 2 files changed, 52 insertions(+), 44 deletions(-) create mode 100644 testfiles/testfile21.pdf diff --git a/sign/pdfcatalog_test.go b/sign/pdfcatalog_test.go index b3f5d35..1fcd3f6 100644 --- a/sign/pdfcatalog_test.go +++ b/sign/pdfcatalog_test.go @@ -7,56 +7,64 @@ import ( "github.com/digitorus/pdf" ) +var test_files = []struct { + file string + expected_catalog string +}{ + {"../testfiles/testfile20.pdf", "11 0 obj\n<< /Type /Catalog /Version /2.0 /Pages 3 0 R /AcroForm << /Fields [10 0 R] /NeedAppearances false /SigFlags 1 >> /Perms << /UR3 0 0 R >> >>\nendobj\n"}, + {"../testfiles/testfile21.pdf", "17 0 obj\n<< /Type /Catalog /Version /1.0 /Names 6 0 R /Pages 9 0 R /AcroForm << /Fields [16 0 R] /NeedAppearances false /SigFlags 1 >> /Perms << /UR3 0 0 R >> >>\nendobj\n"}, +} + func TestCreateCatalog(t *testing.T) { - input_file, err := os.Open("../testfiles/testfile20.pdf") - if err != nil { - t.Errorf("Failed to load test PDF") - return - } + for _, test_file := range test_files { + input_file, err := os.Open(test_file.file) + if err != nil { + t.Errorf("Failed to load test PDF") + return + } - finfo, err := input_file.Stat() - if err != nil { - t.Errorf("Failed to load test PDF") - return - } - size := finfo.Size() + finfo, err := input_file.Stat() + if err != nil { + t.Errorf("Failed to load test PDF") + return + } + size := finfo.Size() - rdr, err := pdf.NewReader(input_file, size) - if err != nil { - t.Errorf("Failed to load test PDF") - return - } + rdr, err := pdf.NewReader(input_file, size) + if err != nil { + t.Errorf("Failed to load test PDF") + return + } - context := SignContext{ - Filesize: size + 1, - PDFReader: rdr, - InputFile: input_file, - VisualSignData: VisualSignData{ - ObjectId: uint32(rdr.XrefInformation.ItemCount), - }, - CatalogData: CatalogData{ - ObjectId: uint32(rdr.XrefInformation.ItemCount) + 1, - }, - InfoData: InfoData{ - ObjectId: uint32(rdr.XrefInformation.ItemCount) + 2, - }, - SignData: SignData{ - Signature: SignDataSignature{ - CertType: UsageRightsSignature, - DocMDPPerm: AllowFillingExistingFormFieldsAndSignaturesPerms, + context := SignContext{ + Filesize: size + 1, + PDFReader: rdr, + InputFile: input_file, + VisualSignData: VisualSignData{ + ObjectId: uint32(rdr.XrefInformation.ItemCount), }, - }, - } - - catalog, err := context.createCatalog() - if err != nil { - t.Errorf("%s", err.Error()) - return - } + CatalogData: CatalogData{ + ObjectId: uint32(rdr.XrefInformation.ItemCount) + 1, + }, + InfoData: InfoData{ + ObjectId: uint32(rdr.XrefInformation.ItemCount) + 2, + }, + SignData: SignData{ + Signature: SignDataSignature{ + CertType: UsageRightsSignature, + DocMDPPerm: AllowFillingExistingFormFieldsAndSignaturesPerms, + }, + }, + } - expected_catalog := "11 0 obj\n<< /Type /Catalog /Version /2.0 /Pages 3 0 R /AcroForm << /Fields [10 0 R] /NeedAppearances false /SigFlags 1 >> /Perms << /UR3 0 0 R >> >>\nendobj\n" + catalog, err := context.createCatalog() + if err != nil { + t.Errorf("%s", err.Error()) + return + } - if catalog != expected_catalog { - t.Errorf("Catalog mismatch, expected %s, but got %s", expected_catalog, catalog) + if catalog != test_file.expected_catalog { + t.Errorf("Catalog mismatch, expected %s, but got %s", test_file.expected_catalog, catalog) + } } } diff --git a/testfiles/testfile21.pdf b/testfiles/testfile21.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f7f09080c19c3727be7a35642dcaedb0096b0262 GIT binary patch literal 6804 zcmbtZ33wD$who&>VS~UZq9}I)F=k9J)qD4JLPB;zfNTUz2vk>BIt|@jovLcnK`;+- z&=p-go+1%^Y)R3{}c$qdcf z7($s>;bD+6#bsq|HpT`lKpV`s?LsM1i(>Kd1TSz5|HTy*UW>pjrA+D&wkqbXzc813u{w8iYuaT#@5Vi==(ux@zYWN$T;t+qHVXT z|FGvmeADL2Q`hgzxqjz<)Ajogf1W#|=aA6%%FTI{V@JIXRUWX>Dj3=&b_-A!nx%K*?d+!dLe(|fM@};YuMjtDR`uAvmd_-!@ ztu-T74xX5{W5X=x=gnOcwX<$Kv285!l{PM`H4oT5P4=JiwHL45Gfi4}Am^$2(-FIR z2!G#m^5)$^hna=ys)o$_6LYFh{Hc38F3U4T{erpoeJuOg z#!lX(oQ9gxDG?L4yfN;=tkcVOSidUP7ETz^C#UV@E!Vq@b89U8(D&x8KUekOm4a`5 zUc>rb|BCu*XT;8R^(tq2O!1#1-m%;|}2_bX#3dX~;$yL$7FY8JF_e6irntQqPyGd4Z9 zAa7c?f|!lEB^R`R@3BjrSk>fiKjO}{Tiq_)`KiX&-Lmh=Ew7agC_ev8;`D=)BQMOm zuGI~gW?Zy)9haZ<-Qv2Mi&OhPIM{e+(%yv1+}PWz)@7XF_M~@oEm*Xlt*$&9(Q{O` z<(m?7zH#`exDG=X7S+Z~I)A!x#*G6}8I5~iHt#8(a;BQ@{LD9lnzlu@Jz}Zb&9~pY z)3vO_wa?yPa_Gl{RZBMv|DyR}lJnDc!{>}Vn>_Iu%lJi0jvTH2_eXQDv^%6-vEaRW z$~Ld_%{%*3a;6k5O&K?|&UMMGF|7AVDf7p)i`KufH7u~KMb8ObSzrFaX^M0B0l6l`731>Psr&p{yx@z|5 ztUq^pe`ew7nua_satV|29Ko$QzBlz?;-wU?sbl@r&x+U8Wm4fClA3kwl z>b<*n*}9l^&EwnE_0IP+rO(|PJMDv^H#%$M8ri#D{7}_Q9VZ2 z5I5i6_Hp*|sk@q&6r{a&Exclxz%c(tAKVi0}o$oO>`(l@g6|%&llzC4r|IzZE z>-e>g7j)0OJ;C>$@TUPkytKEnuHf6B&di^ziQ8CHIdR?kPJ^brGj2eYeo^$AFK2(< z;cD#JE%*M@v|?+Mwg0W+Z#xXhy!hrNIoI`vm}L*QKPb~*Y2TqT>2PvVrux(eS2}cl z$}+-nEunWE->-j{s@ih<6Y~tqYme^Sy7>6Kw?PS3fUw}^p5SLchmbm zo!&0`{@Ps|-b#vLXD4lo>vE?Ho7MgP?r%TorTDxmt*Y(n)fIOOevaw-r1zEUN5B4f z;i+4FH=nRCWGnMo?n=YvIjbK2#S`7fcI)JdZQ2)p82yfSTbo6*7XGsHdS&_ZcORs^ zf7o!da{H0a9Z#((izqTsn^(MPSUe!2TmAMg3C3-c5W$ zs8#4?f#C(kcn7eCsMdw59zwYo9u+=LJ;FZZj0zRihl++4JRV`Kq62{$7(#g^Gguso zXci+-HcFt7QF@o^XA)4HtQ}WeJGf+Otq(J|VCJ<7V$~gyHMphNYII~^{s9}GWvxOs*X(1@&INMKnfasy7Nl;Idf zbi9l}$imr5%sI)aepT=m7hNg{9 zfMg!Vu{JNwaPi3!q7Irza>V#3m&eHw1dL_OFDu);f`f873C~vnxWCq5Ak`r}5lau2nFHOvx|& z`%$;iLC`&3&MEE#8?9uVjEiv#JOEFI0&k4yn(J6$G{6wb%?;x|2a@*q~eR3O9LV2A+WPBpx9pYXH#9?4>ltAk)1)S3n zqD~@(nh<>pcfihMQ(N56eO9*?!f7P(7jtt?gkSY%R$o z#HhGkLT4cEZ0y{xft1X+ST|%&aXk=Qf~eN0VYC##>TIYn(b>m2h8-5u3je!&4d$E2 z<|G9g?4TLQ=QfCbB$Pr9^jaa(kk@U4vz)kf9Ir7biFM&AqeMaA99Az*XY$-qienO; zj&TgqLc+>$!|Bg0LP9wa=)h|K9~gwqRe~-ghxsx1Kc==EoR0b6UJI)XfdnVn3*Bz; zMG`b;QQSDj7N5s?A?6<;|NcBcx8wmaP61*lS{Pw5B|s4jsarG+fheLWCUTD9SuaO3 z((HIBs*h9Qm*AB=rG(W{Mj~YZ!rxalva-~2`(c!-s^SP%o>I% zQImST+^Es0<&@Q`m1}GoQf@G4G+Ld(Xf$Xb#R2Z&vcXIzeStPapxiVQ&}uS~R+?rE za)vRepuA8TxrwAG&}y|ZYSKuS*o*vao=4DB67#-MN#3tI`w0Voi!RuCy(m4xXblsW!5;Qehb z2>G8#LXjnHA*9MnM8hYGQGdeE&g>BBl%(Q42e|80#ys}JcHqfjmd zX#pn;+RKURp<(irLgs))5f~X!hGc|{h(gI6RSx;l>ZIs#kQLkv;u$**hFIj~9d5g* z!(V=+@8u4gP^yp-a4JA*7%u5i1CLG_ksGE~0E^=oE*9A+z7&#Jr~y!+Mdb)wWrPsT zIMHd5hjjqLGNMq6^rHX=o1YKsK^{uLxlH2px*f0-tUDIzAuEc{B_(0rX;qS=l6Qpx zb+ABSxV1tk6|B=Cc?w!Y2PIC?cX9IAFew@fn=HrB5b$q1Jh_3VU?@{oY2lm(HRz%7}xSrN<+gZ z$0C$+h$tRo0ymN}B3nj0?%XQw$JQGJ@>$phNkjtU!|<~Z_yV@dm$KzNicDvmP8Jog zoYNMGcgPS{f&pQ}4D1UYS7Lba?+PBfE$ttN8znQZK`}_fIEqWgdng(MpNI39GL=MX zEy{!VM2G}X@W`{_x0gfA#-O~hG9m>;9&;!cb4PG;xq-tZK8V5zGS$KHLK0Mdq|pTO zS}LR-LOGD)8T^ElVCgkRfOZwwfe@(T5No7(Y=%QABV6*nvh;^Kx#FlFO5bTK+_quNaO_?{>398^IN|`e$avShy(1AD)0jv z!@~du@eto3Q5wJieisb^*qDwDL1mM8;kzj3=L^dDb(pk}fc(1kpfBJA{?+PXLZAyz zGUzF{^ZEz;l_`;KXW0Rs?;t5pWLv~ch^m5b|$R8Zk4PdX!}4FhQ;l(_=q8jg(cB;96&2L%L)ld|(j zqn5%2Uxz#rLj%QvC5Jr*Ce@IgRN%8oLqbi=fU6M)ohar-u$?G5h7Gse>-adPgn-?k zCqT~shx9s~Mu$p}pGNAnP{Q#aa<|abaJ3RnQ{ixEMI-e_sJP*Lq`?5u-in5oMYRvRbX~QJT*5h<`dL@vUv>^l(Md%C4T&L8}q&i_QQc7No(U2aYxz zA^!hQMlve2Xh_;X87Z~i#As=q$x3Tzo55D1vO!;0qA?od(QmWBGUl+XfbhK-T!Klr Xe*Sbyae}yfdX1JOqM}lUrV{@Pd6&r9 literal 0 HcmV?d00001