From bb2570c9c1fdd02e63c5af02700c7f7c4c3f3272 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Fri, 1 Nov 2013 16:30:28 -0500 Subject: [PATCH] Removes duplicate entries after reading cmap table --- src/core/fonts.js | 12 +++++++++++- test/pdfs/.gitignore | 1 + test/pdfs/issue3025.pdf | Bin 0 -> 7467 bytes test/test_manifest.json | 6 ++++++ 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 test/pdfs/issue3025.pdf diff --git a/src/core/fonts.js b/src/core/fonts.js index 5b107f8e5..ed9a05893 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -3077,6 +3077,17 @@ var Font = (function FontClosure() { error('cmap table has unsupported format: ' + format); } + // removing duplicate entries + mappings.sort(function (a, b) { + return a.charcode - b.charcode; + }); + for (var i = 1; i < mappings.length; i++) { + if (mappings[i - 1].charcode === mappings[i].charcode) { + mappings.splice(i, 1); + i--; + } + } + return { platformId: potentialTable.platformId, encodingId: potentialTable.encodingId, @@ -3758,7 +3769,6 @@ var Font = (function FontClosure() { if (isTrueType) { var isGlyphLocationsLong = int16([tables.head.data[50], tables.head.data[51]]); - sanitizeGlyphLocations(tables.loca, tables.glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry); } diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 8463dee42..3802bb165 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -50,6 +50,7 @@ !noembed-eucjp.pdf !noembed-sjis.pdf !vertical.pdf +!issue3025.pdf !issue2099-1.pdf !issue3371.pdf !issue2956.pdf diff --git a/test/pdfs/issue3025.pdf b/test/pdfs/issue3025.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3a97a2b2eb3830bd8d1530ecf30f02b68ecc05be GIT binary patch literal 7467 zcmd5>XIK;6ww5lTOOZ~Lu9P%NAan>FLFq*ZJ#<0`K@=2eg3<{cq=_O`QIOsQ=}n~t zL{Pe*fPmZtKhNCNJ#!MLecV>b$7zYBuZ*#=2 zI{0|{VeIfG5^P6$;=$7!FhK@Fpe7KXe({rg_~NxsR|EYG{c|-0>EClIqkJ4r$;8dI zkyq3-E-UF@6IBsaH5S#!po35zt|(DuPd9sjxSEHZr#;%k2`FxY_E7ThLH{1W8-vF9 z_^LRgFhD5emuadFK6V(im#-%V2#5YMPFx4|mk@*?bB=GU@H1a^> zCvm{*ocii_hzRxp@YCA+Iul$8ff3g9pHC)6YK=6F{3kV1Y5q|Nv|C0NJ1^muK9S095UuV1!A%lH6NSQ{_!-<#PCh^=ew>hS%D<{w6e@zf%=GlskUI`Csacz+SEnp4;N$eWMC_KFcI|>x{;)=VMyhh$M9q_ZV zdm`pc=UW+Z&_r>r>cgISlI)!Y^y_jO#3OuGBy*1AuCijVG1N)e%j1$E3et}m#;836H}i#vMeb54;lPtZTwG> zk$_4_{SFftC@l?>{#&5pjL^PGM(kl5$JM@+nl&)Z=O494V7}TTMY`IW@6S9^^Vbqq zGceE7ue(G1s5a)}J)s`jOTg;Od3le3Kx5JBvt)pax2YDN_4jZ_!JP&;2XKS68B#WiKp|7=!)%_GXGH+~G{y zYxG;)f`+MSN{y!@HxA>vGH9>@bJJuRX%FQ>9Ya^+Hq4|f?N4a*{l~{Abebh@E?rWb z)Z2M2gL$?yB2H_Y}>+*(dN*hj2Izy1IdN;SRbQ>f$F^L@S6z$lIp1>|{5?nc@Prm}_m{ z77EIe&@paNxa)_GBJR;Yp=`u5$hWo$Jj6z*75f#j9NR|2>;u<|O6bjYn&Sn?q74NS zV(v#9?OrQi7-N4TcHI*sz$d_8lHOm?>7rd%0{>CsWbf!8Yqi0dASE@JW(~^o%2Uuc zFsHHAOku&88?x2+aJPSCAboSaA@ z)5F?Bj~Gu1eumf8@UA&qD-6h(3d(YQc6w)KE>0gNY@f&r7`~?@!eq#yRZ34G0UNsd zaWOxN2+0Rz(9}QzbU=(0R29!IF#8v^-ukJbP7Zl+$E|JtHV1sGCD!s|Yt#)Un==3~ zeHf{Jq%A4RLi%%~q7UE0Qnh%N!KU0Gz) zQIc>ebv%i*-g1J?vpC`;H|E7y7WiYjFJ27_fbAX(+8)i-*<|@6fet)<4|?ZpYh!g(%}c64@GP4l}HTNTGiO z#PpMmlrYPs_r}~CJ~Q%_R4p%VD>aGORmkN~NVdY1K3R*OSlxI>ze@KRUETN?o4emQ z|2wnL@4VNT5~5_NU{SaGP3Y_2-zLkH{6r;NQ)6m@t}#V=rcR7S8{y8oletfGU)Q$) z31c@NiCnckzbO!hA-%1M(L4h|himeO-Rg4)BOkCOWo6aES{)#n4r7n|mo~SfC>DZ` zc6+^_t1D%GHnJF_WjAYtKVGKY+}Iwf%wc{IEZe`3kv*V6*>yJS!DXNqv-`xNlb%a$ zM5HEky&fSR+Z?dDWm*1mNX@Vs!>#VgZ!kj|(L3>xFD0@)D_O(HiO#-}ZQ)@^6^yL5u)`+EYG(_$| zEiPq`d+Qm%$@ZZRx7{Ux{cchm$AU&oif};+J7p|KvYRNZw6?VfHeoRQp~y&!Z^TkP zbzIh5Aod(n)wV$8g{Gk#n`+_sWc9w4iG7K-Hd5=M#DdYTH}F~_AJ&%;8{jTPg(@>P zUbSVMF@MXt=WV2=b`M#`v_b!kg9bG1~!d>?fIaG3L=p+S6YkC3egZ{7%!T1bd)b1WtAl-esg-$9W#lp312;J&?kP$=58j9;gPg_&C z$G?lGY^7=LAoePwX#70!<2d`fP0+|?#OO(!IRk*Rl!xUV{PdSP7$AVe2q0EfP zg3zpSa%_rTnrzVZr=CE&l%_*Dw}Ki!OHwwJleP1Fi#wud=TIQjT|rj8Ky&BE?{~s49`n z0uGYL$m3G8NJ(}Ip6uvmiIj(MaQ47zc`rq0fwB0V$T#`#UAn-Q&x^*HZpj~yukW#M ziBG*u&Kk<{9T-!j?ySucFwHQWcF#n zucPsd`29YuAWLJ9#eubZ34PJ-ONxw7Ft5f%+CH!M(MXR5Ym4$tjOyEF>^)W$Zq2>q zNWZiCQTy5LR~h!3K-WkW4SwHvB{x#UE^HSjfnrznSI>{)xWA}(U}MRbbe9eoTRUK> z-i>(074ht=j8~aXU6y{enP0W6XbpWMMSU2D!M<`Ag3+i*_;JCB8%bS*5_g2|7?S^x z++RdXl@EfWKff1Vn_?Q7)aY!P&$(OljFbQ9qco3BaZ>O6i|iATbA=UwtC{X8R-dG> zWRGSe-(E%^s{&JG--R>APhJlRc^}AUXE`&qPqytRO?F;C3S!1u)W?V(9kRcbY&5Fj zRbG;UD0hw2yKm`5L2oDZf_>u)?|d5a$o2V`vAI`@U6eItwEeZzg>j_`MPNxomI8mRjub2j*9x{gWM7wPSY3*~5C zXocaUBBQELGg8$krSXfOrPaZc%~Tc&fDu)D#=^UcZK?T7EbDhhHjCf-YA~L|h3|j8 zYwcdyqFd{yC`OZdI7;>)@>T2&*-v9}aU^o`*>|r8R%d)q{T|#uAwMxaTd>$Elab@0 z^F8xAoi5L=CXKe|iO1+_?!46Jo0wNW?(3KY^B$g@Cs#$4HCx;@6V6Z>8FgbN%c+B< zIXvLG{Zv9^xY+c&%9%dcL<0)b{?=q+(EnEK8$CX8IP{>DPoMX5KQnVmOfq@IDAsZ} zFVygZWst_AYk7|J_Z4-TeO|Y0UE_iWUP2ww!s<}l?Xrqcp(6BW#k1ih5iZrJ?p;j5 z*mN4UjH9!m;|ht$(-|cZ<+dD#U26VI6e!2Bi%~|lQ$_I_c`;?Gu4DI= zxUyq#t_9ee*M!!+JDgjEbea5~*r1;Fb*hKK4W8qrM8b6&|m_ z3B^LrtEhfnP9ZYAFnY&#^)J9|&l|RTdPMBp3qIf`Xe)-(w)-jrWKSZgyKZT)P?Vh+ zv=lwdNmOx+5ClZp_R{~XteG|R82B;#*0jEbGl~z}0QC8J>zJmeWuksEib@_SZoo!6 z+B|Poi%2vQ<~ui!u%c5dqUPP$&y+1_G2C`oNQ^-jJHCHC`9WkH=k?|5vF5_H^XA?l#XX&Q4PNJa==J+M{AteZ~y}@%@x(2%Ki@ZaPZ3E-z=cGp*jFtF$%2bgnpIC-QqwSYhkRw>eV)8@7Qs|T3k&*2;=ena8K9(~^ zjg=b}+%`HZ@KNnan5S^fGXx{9?S^~@_N9dgkC`0Ex=%Gy36>RYLTV7lWTXPU%ocH- zlbSq@$A8_U+VPUIvABD)dAfw7UQW#FXSiUo*dRAJr!vLRDk1%SEgSWAzRvrYN7D0m z(r@&~`CcB?)TJ!h!UYO%rHI#l4H}PJ-!OE^WSoZN(QU zCKo_pxPr3)2F32@lx2TL)y(HyG5>^?f8#@8-}sz(Z1pam(;O)Ghg-!Sm>YN!XQFX} zojdFfoDTCpJe)RqdQSn4IJlpaCsjY!Nj2&HjXq$!Ie2;b$}ai4#X)&aKt-ZoCNGCq z>^&i}4Vj?K#}DQE6OAmfO1-#mVo%O-REpv@*=xOZXAd}zviJ;wg}j-_)KtLw5TP&5 zI_)S7)BOjB+gvOmbR65+RMS2mVNJ-3yYPaADb?u19bO?G#`B$#CHfu=M9YjX9KGh+ zLY^M14y?#i+*}?arWw{5d);#gG-yk{bv5?gPC z%OF%f;pPHQ=rqrY{Y*P9r*eNx-M*P-?>;(FKKlNN%khz`IW|e6%-_+&HcSuA>25nh zCaH=La1VCFLTSN?x9+uH^3X#r8yN&Z^*xdKz>5&I#&jzS{jKHqy^&Ty7gU;7mVIV9 z>qPBdl&v{x<}Qc4-rEe>S=yBq{Gz>GX1;AWUcRp-N|m3g*|2Zgq_zGA_jcr{?i^NjqwgU#i{M?#pvml6Xp z@Q*k1Q#;r`k}QzA=w3L1dEIr@!kH`wavJlD43;t&TJJO>Go96^^$-l!rq>oU_r(fk zMRGn7yAY=r4~|JOnOcO45rzHG+paQHiOa;QH(BTBmfw{3 z284wYfzoYIqM zj<=Z6nJ5!)6CJuXdc5c%oN;GNJ3(d=}-wa-{{q|+ZunBTBI6i#zQ$bx@a0~HF zXY5BHm%I0Q?MdbVs~z=nTy)~Twrg8uwxbY73D(AwitEB2Ki{zR-n+&0@w)SSZ^=v! z^Gqyf&V({t$L+{AnsEMdF?#+Yf zU&QK6K@byDGGqe})u0HDJJn`ac*PPdITp|8wTB_NG_+c7(r4&}MGKS>ThK9=p0`Uc z2vnEW!}#AHfvMUJ!AGjJa;}!<*|98?N+0pgv#u`(0agWD!TbCO7ClgsKsd2XxlQd* zVWimny6>0$z7^Fr*IRq2I;Ophu3)xLtZp)H3^!B1f(#AK4-YfRkO*U|6%>KwIn(gwi{Pa!rLyp|5fB@fl)^k=?FQvaf(62EH zg*3PiM=&35ergPpA)7h((5{ttZC^Psct{w}!et+>;7VyVuzb z*$1@ur@Mk>eFVGbdcVI)-*m+P(@Cq?bapVvkG*L z_q!KF;iF)3wnnNgm1u&l=9r3?9s9!+5QNa0{6p^#TR?CyzD4sJ^TnX> v-3QERm-8Ar*a0XF5Wni_NoXgYc0f;Cg+9J0jPI$Bq`;CO06)Ll736;bh*7u@ literal 0 HcmV?d00001 diff --git a/test/test_manifest.json b/test/test_manifest.json index b66c4cd98..162aa7019 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -1363,6 +1363,12 @@ "rounds": 1, "type": "eq" }, + { "id": "issue3025", + "file": "pdfs/issue3025.pdf", + "md5": "8e4e8eacbd7c4c248deeca0ec49d38da", + "rounds": 1, + "type": "eq" + }, { "id": "issue2177-eq", "file": "pdfs/issue2177.pdf", "md5": "48a808278bf31de8414c4e03ecd0900a",