From b6cdd70c64611d0e1369ad928028b2cf51009379 Mon Sep 17 00:00:00 2001 From: Markus Ast Date: Tue, 5 Sep 2023 14:25:51 +0200 Subject: [PATCH] fix `Name must start with a leading slash` Refs #312 --- .gitattributes | 3 ++- CHANGELOG.md | 3 +++ lib/external.js | 9 ++++++--- lib/object/reference.js | 3 +++ lib/parser/parser.js | 7 +++++++ test/pdfs/external/addallpages.pdf | Bin 51543 -> 51543 bytes test/pdfs/external/addinbetween.pdf | Bin 52131 -> 52132 bytes test/pdfs/external/self.pdf | Bin 55137 -> 55137 bytes test/pdfs/issue/issue-112.pdf | Bin 91488 -> 90071 bytes test/pdfs/issue/issue-117-nested-pages.pdf | Bin 1477577 -> 1477576 bytes 10 files changed, 21 insertions(+), 4 deletions(-) diff --git a/.gitattributes b/.gitattributes index 4bb443cc..e8270cc6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,2 @@ -*.pdf binary \ No newline at end of file +*.pdf binary +*.pdf diff diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f0f211f..bddec07d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Fixed +- Fixed `Name must start with a leading slash` when adding an external document to a `pdfjs` document, and adding that result to another `pdfjs` document again (caused by a `null` object reference due to object streams). Also fixes duplicate objects when adding external documents with +pages in object streams. ## [2.5.2] ### Fixed diff --git a/lib/external.js b/lib/external.js index 34cb3b6d..b1abfe3e 100644 --- a/lib/external.js +++ b/lib/external.js @@ -48,6 +48,12 @@ module.exports = class ExternalDocument { const kids = this.pages.get("Kids"); const filter = page ? (i) => i === page - 1 : undefined; + // As a first iteration, simply register all page objects to ensure they exist for inter-page + // references (as they are not part of the `addObjectsRecursive` in the second iteration) + for (const page of this._iterPagesRecursively(doc, kids, filter)) { + doc._registerObject(page, true); + } + for (const page of this._iterPagesRecursively(doc, kids, filter)) { // if the page object does not define its MediaBox, explicitly set its MediaBox to the // value defined by its parent Pages object @@ -55,9 +61,6 @@ module.exports = class ExternalDocument { page.properties.set("MediaBox", this.mediaBox); } - // add single page - doc._registerObject(page, true); - // first, register objects to assign IDs (for references) const objects = []; Parser.addObjectsRecursive(objects, page, 0); diff --git a/lib/object/reference.js b/lib/object/reference.js index 76eef72a..77618e0e 100644 --- a/lib/object/reference.js +++ b/lib/object/reference.js @@ -21,6 +21,9 @@ class PDFReference { } toString() { + if (this.object.id === null) { + throw new TypeError("Tried to write reference with `null` object id"); + } return this.object.id + " " + this.object.rev + " R"; } diff --git a/lib/parser/parser.js b/lib/parser/parser.js index 55d68165..c6629b8d 100644 --- a/lib/parser/parser.js +++ b/lib/parser/parser.js @@ -68,6 +68,13 @@ class Parser { if (objects.indexOf(value.object) > -1) { break; } + + // skip references to other pages + const type = value.object.properties.get("Type"); + if (type && type.toString() === "/Page") { + break; + } + objects.push(value.object); Parser.addObjectsRecursive(objects, value.object); break; diff --git a/test/pdfs/external/addallpages.pdf b/test/pdfs/external/addallpages.pdf index d79eaa4cb5a0241b5fadc1fd363311c07b2dbb26..4ea8454255e0743be5277d358b3c539b11040ba3 100644 GIT binary patch delta 1365 zcmZWoO=}ZD7-m~MWThVg(}+r0g(ehCGw*!7vx}vNMifi2LE=dij0vV5HixA4X26@r zbPn1>#cM$ivgk$79xN6FFCMDL9zFRJbS5O*?Ch|xGtayq&-2X8@y_J&&SZ9>di_QT zme5`Jr-$o`ezrP|9`WwDnM}FTpzYh6 zxmUhbsjNQiG#j2YsrTauvosOQ%WkH;-V7giTb>`?-hAP1_`@xVK;!rzT@gsK> zZAA3>>3rclh+&@qeLU@hV|_3O1244hTKjIe`KaA!dX%V>)oYH_aV7PA@7p367m|HP zzKmN2LGg}`huvn_?Ra!xr~3P0PW^~-(QfPKn!}?o zdOx9mmp_(f9I7@Bi#bih3@`ND!Gw!|akYK8-LrQHa$h@>h$bk^Ww5Y-GaHkX*tvj# zugy&4f+V2bGNTt$0tx;Q9K$%*n$3tYN+{Q=Z4C7ru`q!)8A^mjrbh_X;!*_#&{RQ0 zZo5EHN?RSpfY?Gb#`G;s5)4qtUK&glWZEtJm>6NwF31T8Td~G`n=~g(jIdsOBM6$8 tm|(~m2m6dQ#_S{EOs3RnEKNoPwvY>iBN4Vbjx<2^@~Eg^@Ry@k{{j5KMzH_@ delta 1296 zcmZuw&ubGw6lPNtvQkSlYPC?dg_?qY7Q~C_!D23+D|iw73%q#MnUYPK*}luneDmJ--uK?j-pt zr(Lgk!uZ~D>tW4YxaMd!tE+Chuu%{1bsC#MeIhRwUJTHS*{)%urIdwo`Y)XBg1za0gmcT;6b z=hDMIfFFH&^TW+UEE*-@<01|diX>Vq&pH=kp@?)8fM!f~)rjh8<+j74-<6fjMI3rC zN?;s!m|A3Nt(=Q$+wYDzOr2<4J;_Y@T4bpecIsiL?IDdGG*Z`7$fH*DK4sR05BVAW zG|Ia%Yy2!gcukqAafgp}Hqap|@` zu;8Ym?p&yhLjOTT7jA^Q@dvo`7l?PJX_I;BFpJ^Lz2}~D?wfhLIr46E=0{5IC@_v;{n6zDATJab}J4+YFCv;D#;K2Hoi5m285?tGzZmFZGEBy{YbC(aekOyFzwvyrnE*b4Rjj1pknxP>+K>(cr(V&HJ zg@V@cp-d4nEkfF?gGok0D2NoGie zw9xq4-x6xp5w1eiXp(4Bg#z4IkA*h}B?9i`lG1q=r% zz(`lRV2ruG1rM2t_f&7qyYL7>dP zU~xppB(6lcT&cVUF$HryEROJfY-tHGZ61Y_vt4X{KEkios5WobqsWqNuu{5EE}yxv zR;$L8Sn}0g3MCt(V}~iVsJXK@V~)I@NauzYqFD=BG6)L&bU2`7;*{Jtnhz;UKMg+| z4wzXijtAWQdM3@WyT?N+()Y#Xz|@Kb^XA^SJe8K56-^~73aLup-Jd)$K~=Y*7E1JG zXe@Yn96DyATxqGf+*rNUtkz;k%*xiRSv@;}GIim#6^y zo zIsubZDYM?5!-6~Q=>W{n_Ebw~-1R^nAu@5fBw_pjOrnE9Zo(-JWe^iuq4+^e5_?aC zv@!yTWDGCDNtDDTQ^}Mono4d@aezyuP(G#^UVJYP`x64Ta|Y~U!gU9f2v-bZo*3YQ zc=fmdub!kW))_-)3QRC>{2)QPjzKcwxFx& WTqlUB#ITRIBcipArl!taTKEqwBSg&r diff --git a/test/pdfs/external/self.pdf b/test/pdfs/external/self.pdf index 1e1ae6b2acb3604b6a4375fff9c9e0a847679d00..d7ef3f862dbe399d16f9177b83aae46e641f9b73 100644 GIT binary patch delta 1634 zcmZuxOK1~O6lGFGGqs;MjS;JMRNA1>=Kbcq8Hz4iKPafNw74iP8e2#UCP-VC){P6@ zg^QqzirrcKY~D_x)DNh*5UCcrv$%8bTJKAylVsu}km0;{&%5WGJG1?&ZTnSQsy~0` z+#ns2cK=^owk<2Ee3x>GJ7y=7xzTy%Qc@}RcJUo(d>kQFd3?kVq0^^r{LPf6%Y`}H zHl^laGIwEgbYyCNX4>^l>GkM@4=W!WeQEZAJsgCGnWQY*r=*pF(q;}y4M~DBz14oF zV=oIUIF||zAIiXsMH{}p?SRa34-70EOHiRNE{t3F4^J2W^ia>xHMUK?8llu{w~q`Q zpfY3(q%Z58DXiWf63aBL3bT{B@$y7z_C|Sn#$^a6f;|QhGZ-l!C6}9>^3rty;TG z!uo1f7YZ+TSrWR7=N;2GCYKv6mlkG93-d1XV6I3kRY~>1>*B#mskfU~%{1|vEV&1N zi)mPCclNPrv-PA{fIanCL|>l0Z+GyhZ%hjwE*@=g__)Q;;0X(!-R?m1e>=6=XqXGm zkt>bv_6=mj|IEcc>gK9QNZnfwKSzcWT!!9$a%xlBc!#R?>+3g9w(N{a$4p|A&D=prm=&MT6s5K3B}?U;0cJ+|*o8 zzCUX1Hj>9&Pv85n)|uc0&TeEa0jVEO8WS_iExC5}K?H$haC0Mj3Wv05hY-dwp=OK) z9{Lc+ln>uFoF%-qc}I!>6~{1-qP!Ruh?d(GGjC?oIVytyhp8D;gkt(;bw;A7qCSUP z-<_p+vy3niw*WDT>6sNVFyg8B^@z1x&pb+6_)uZUcd&>(@-1W zAWi*nmg0FZ{9wcxIH5G21Sed@YXzY)E)g+5-lZVi3$ePxf=DXC+H_jRMsUI7t|QVi jN{C4US2vv#@n(f2UJDj@fq<1wC*8sw1o#Sk-hA{AeoCe= delta 1642 zcmZuxO-K}R6lXSs9KW&|T~X7~(3ME{|21ETMy(kgiY@dM25xR_9acr_R-Wpqcoa|<#e4|#|POXv{fp)Or2h>rID(>UzRH0)vK?R&rf@8iwvt{>Q4KhQdmpO_q` zBbGX_hnK2~N^8E^G>CCgt*_7KmYCsG7P?yKer0Nk8Pu#i=y8J5__&I{VtH=9a9vg9 zq`bM5J)6s&nq4Z+8I~NK2|FxU%xiVFEW(~QyQQV-{s$r<25TqgbxQN>So{ zZn)jlNP>ROEgN1mq+vLxLUXkbjxF~q)H}C4t)wV}zT7b6yS5HC_jZ)@P^Yr_0x_%+D1K3dQOuwysrw>(rMN!Lubj1l)M|No}J0 za+pm_=$XjCWWj*%kAJkYed3JqP&|X5PxKUHa5sNhF}<((k=8~Q2o#)9xSG#+lZCf+ ziU7TIMiagoOl-cqTr4jy8H_`@L@I|2*eG=>c4eWngUf^bTxE(p7#SajN~!HgO=3(^ zt%-~|C`7OG%?~r{VDdQ;8YgIQdtm!f6n`FVhhIx+cz)x{VW}YEIfqA^Z3_2JcJ~aX zIEUF&dWwqxVnPoVvBq-lz}4y~{8^QNX?RzCqy5XJW(m0kYn!@adoR)WbhumSduT7h z$QBn)6f!b|G!NC(gdm8&V1i=Xke7XW{9vQpdS5iLP3SG8;g**P7}S`LgXL1z`{qrw zqy&RSk9jk%`;>a-3o-=r?rd%}r_k8b+Zlzxz3ogJ#vw1GY^eSXAq-i*-_}-8VDum6 z+Ndg8!<|5G(V8Wk#H?i!j5pTjio~qVNHBXjq(m)OzN(R7Y7>Iq#cI?})`Y-UF4D&c zLw8<%(8l8888NLmb*v>$XC@^KT0d$R5(t*X<3fe$a$LbE2g^>F$t=fpVfLdohIvK1 zUCaDWErB4@An@!z2!c>Et_*8-f-B*|0cA&9i8B^lB%;O|kGm_l&Es6LmOR~bDSjCu iI)&?+L4y5Z{K6t;d`|@S;RkR>OYAQ~;Qnsy-2V$Y*`Hzn diff --git a/test/pdfs/issue/issue-112.pdf b/test/pdfs/issue/issue-112.pdf index 6d97786f6a3fa77002baf0d8de834eb69d1ba284..59600ddbd497115ab2749eebc1e3973e219f0205 100644 GIT binary patch delta 1525 zcmZux&ubG~6y^*R?O@gL9>t$zpjMtwYwnMkx%XCE8)=hTYTFb=rHIBhVns93WZ|w0 zLD7XJxH#&ba8`lZ_-icC(=E zpVO_lu05&*rdc2tm8;{W%HqoMm1?x&an_8V@VJP#Z3WGplW^4Gtd{D>NW%`CJpxbC zy%}30w|uE2JkGmwIA-SH?`vT-8zow#Z4)jr@kbHu79I^FM>JnXetekPX9W@NsPz z7^)FCL;JfUux3dN!vIc?!gf434E?w}3kN7lKL_x77B&))1nj9l$-*~hXM=2SFIhnz z_zer~m-M*8rv(^GXUpZNTJaV{Y_KO{qdXCN>NOvslgd;+$ zZQq}w(fxK14Mp6OPmWMcb)+}Wi+#;H!r*KUhI-=j@t+CU)#~93yq$yfcsCCjYv+C2 zvc2{6LD&LBsZfCYW)b`nB|M?6s0)tdmT-inN%Cf04)XYB5-K<|121vw6e#>R4-fFu z6!hWaLy&P~SSQ!gKxnEuNyBiz00T4(uf`#Z-wW^;L1GW^);t_v7dz<%^$+v#rO%NH z|36FMZ8NYDw-w>CBMsgx!uGL1h6J_CD|>Fd(Sff>YG;fqKM|8k`1o*<`ueU2W2@bD z81rqDI_fYMnr@uZp-(f{fm2#(@~tywxa{VjjI_7cuGN+RWrC3A%C5GUQptiQY$msG znh85#9l4tMvYWJKfuhHu4Y$geW-6grGo2u#IkT@tTQcPeX1YmhA#~zk5%}G%YN3K) zHBr#WPKI=de2LWDZ!q!l|xTAUEWHyxKh2kQabNy!gI5$eYD5Ym?TQlAR3v_%yKmzV^65C#QKCYHDmSXq)I~;-w{nd5 zxa7crV`Xv}gv5bAp@3vgRDu(gK!sN7g#(pPB`AUm5(f@2&vqQ|?z`;nym`O*&2MJ* zJ-B`BmpjKsCN`H#Q(`*sCjO)4dAdEa^Rn@|f5FQYUXL#}>O1kZnlD7xG&kqf8rR~h zZ+V{caWB=t?Q9L~LHpL84*LM5xY1g!?d>${H(GJiw|(;)zTn;0A-wS560C!5k35a} zHFyrEm*MM!kJ*zD9h6}lpFI!bA3S88hYT)p;8;}f;X#L;>-?dh03h+R5HxNYSOkUB z3-HpY(CH9D4Woa@gvPr8+{K>^jA3;NPT`|@D1pGK1(-S^dPxjX6z%+&BlkPG#EWpB z35$9LwwQ?UqZuN#6+sS71)h1L@%HX6ZdBmKyy%OW%N0t}7ZPv10`vHD1y3Oq?Ch*peWRN(|}mZ1)|ONXflA5`H~d)#y7 zd<;>Kf#yBUwCHQ50-UZunFw^%ru{?gv(#+gufkO)_Qjm+X`_P9x9jlNai%4HSp~(k z!r!X!-kR1PA1psGMj8LQ-?P~u2q^=%{Kmi*TI#-}O>v{}-euU>SE((|wJS@)o%0|{ z+d>;?>c)g01+p2xNJyIMq+g_XpXUC6XBe4)8X@HvhFQSKWOC%vO<3ZrhXUM(Kau=m)&l W+HSVqZPu=P5!VsjRTC>4rT+o1#Fjw- diff --git a/test/pdfs/issue/issue-117-nested-pages.pdf b/test/pdfs/issue/issue-117-nested-pages.pdf index 58d422d4f1b486cef468384dd5a37cdb207b4f6f..d4be53a6fc82ef3decd1b4bfd60b4eb8921a686d 100644 GIT binary patch delta 13996 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 delta 14035 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 W*%z&#k