From fcc9943d040f8ff357f56e836a288f6dfe7bfdba Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Wed, 18 Oct 2017 14:10:40 -0700 Subject: [PATCH] Use charstring as plain text when lengthIV is -1. Fixes #7769 --- src/core/type1_parser.js | 17 +++++++++++++++-- test/pdfs/.gitignore | 1 + test/pdfs/issue7769.pdf | Bin 0 -> 10923 bytes test/test_manifest.json | 7 +++++++ 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 test/pdfs/issue7769.pdf diff --git a/src/core/type1_parser.js b/src/core/type1_parser.js index d8b0da896..a0513efcf 100644 --- a/src/core/type1_parser.js +++ b/src/core/type1_parser.js @@ -150,6 +150,10 @@ var Type1CharString = (function Type1CharStringClosure() { break; } subrNumber = this.stack.pop(); + if (!subrs[subrNumber]) { + error = true; + break; + } error = this.convert(subrs[subrNumber], subrs, seacAnalysisEnabled); break; @@ -503,6 +507,15 @@ var Type1Parser = (function Type1ParserClosure() { return token; }, + readCharStrings: function Type1Parser_readCharStrings(bytes, lenIV) { + if (lenIV === -1) { + // This isn't in the spec, but Adobe's tx program handles -1 + // as plain text. + return bytes; + } + return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV); + }, + /* * Returns an object containing a Subrs array and a CharStrings * array extracted from and eexec encrypted block of data @@ -548,7 +561,7 @@ var Type1Parser = (function Type1ParserClosure() { this.getToken(); // read in 'RD' or '-|' data = stream.makeSubStream(stream.pos, length); lenIV = program.properties.privateData['lenIV']; - encoded = decrypt(data.getBytes(), CHAR_STRS_ENCRYPT_KEY, lenIV); + encoded = this.readCharStrings(data.getBytes(), lenIV); // Skip past the required space and binary data. stream.skip(length); this.nextChar(); @@ -571,7 +584,7 @@ var Type1Parser = (function Type1ParserClosure() { this.getToken(); // read in 'RD' or '-|' data = stream.makeSubStream(stream.pos, length); lenIV = program.properties.privateData['lenIV']; - encoded = decrypt(data.getBytes(), CHAR_STRS_ENCRYPT_KEY, lenIV); + encoded = this.readCharStrings(data.getBytes(), lenIV); // Skip past the required space and binary data. stream.skip(length); this.nextChar(); diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index debd68f74..07539309b 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -31,6 +31,7 @@ !issue7101.pdf !issue7115.pdf !issue7180.pdf +!issue7769.pdf !issue7200.pdf !issue7229.pdf !issue7403.pdf diff --git a/test/pdfs/issue7769.pdf b/test/pdfs/issue7769.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e5861067ccad6b133eca9fe3fd3468b71e7d1a45 GIT binary patch literal 10923 zcmeHtbySqy+CGhxASEEm(9I;w3@P0;bV{def6z#zVEDczTaQ(vlff}?6~9F*WR<9`@RK@)HEc)QZfvJZ{GIwGtj~T zAb^+CSq6D|pq{%Y#u4Wph(QCuKs^8$goHqWh5#f`9Uy~%z<~zDZc}2n3={#>0@wgx z(qI4>im+2uWWac$4}<{z_F(|SekoDIID4TnMvgcvo~TmQ%fkoji3h-dMmP-G-I?Hp z1Arllia-r_4*~`U)bMa5V7@N_YOC4EtEhn>8c+>YX*g0tT?L^I(}1cgt4c#bNVqft zDg#!OS67BXR6$^{imI9_45_Ap(15^T(nur>uAv46sj4g50ku8R7=If$00KT}yLbU) zh~}YydKgbvf*U|u`oI?7LqCx~l$RF)fH)jCAtD2SAb_R;-WZ@I3gZH_umJ-g05A~% zJOPJs#4^yjO*uKCnH(IP9G*}z)61N`XiTPd|6(&b?6L!WqQ84Fo089BOQ@Brz<_90-Z#4!&q*I!&g z{#vW*bVFa2DCIi@`l=8BK87D82kYBZ+7>`#zG*lUz@6R zwb@94t`WpExhC#ec&Xhkecib%8o)~Zl=GMxE5*sP`$}hCEjq}t8Vl5L2l%ZB0?*oA ze5iAIw1%SOzQ2j2da&5C33+4qgY##U>dxQ(ly1U9&84}!jo(W@?=ro_wDYh>MG}5w zuG;A4<`Ifb0TD)hsfbRx4Aq<0n+5tE9`WI#U?s=HUvV&)Bu9Zq?v8vl=+xp!bL0@^ z$45SfLU~y#TPMe)1RcMwFD@@dWAP>p$-vpha^pES+mi&@+b7KPd!U#-1x1oF(o$GS zPj7n@z6mZ-=zj!6a(A`)>0gNlKG>Xp4U&dC4o^I`KaT$hX(Q5d z8Hf+c)i!~}f;I^56tWihCfI{Vb4kqPLov;zt}C>1bjcC}@5mS5 z&+exn9u$~MU($^z)N`G~uT|V-x)W?-yZP!)R8Xz)i zDIe-X&+q@p>(z%C>0l0YG1dC#{#AFq`U>y*W$J3ggQ=Fi&o%ZB{enMo&Mn+p{Tu znKH`mg?YIE9Iaz3iowOUG46O`4M#2^gI;tTUD4bMJiq1fNmH4zmy^z4(ZSAnH_dCP zyqCjd|Fx9nux#!-C9B9?bOms~b=8D;DRHICiTw>X4o=^{=Ejc$1Oxq~2N(c{L4Mqr z5CHL41oYzt3Xp~pe~f;+-2HEV>~}@jet1UWZP)15cQ@`xU)-raxju~*ClH6DODDZc z@_dHcN*|vZGjom_4RfvL%0<=WDE5nLUxfFQe7o`WlU`eu7ecM;%ceG#Hfqk{@n-=u z94y?-VqyYf^i`x3*RMvCXE?-jWRVY0Qso0!zMRQo@Y5h^+4B_!&OW+*Pwwc#L&nvx zoR(51w^*@88rtL}eiI`SS>=rVRCq)a_x_D5jTvDgBF!|UelK7-paU!yn0`*B{tD>@bu zf<~4|TU}^{h*2}$QSxwsmU`hmnGznMjmWF}u)b-b)&7Cd^jSt0@?Dt+nLfjz>Fb6` zJJ{jSTcsmjNnhNV>-AaJ*B-a>Y~z_l%alG1i-?8JJhIwb`f`pVmG}x%y0BJz2OwvHkJtJ-<~YmGS+B*)4U_=v%j<3V2Uv zDeZg<45_ZHC#4VHP2>@bKO-{m?Btgf&yex^_A~VONV04riGgcQN4=RI*$R#>dzww5 zLZ9l9UUIgenWs+R>w2x;_TXGgps>N(1nbndIc4)>P8WC42_I6UE4lMH(}MaDGYwaC z(wd!&I#37vt(gfh zJPqd39MPI4jok+R%jUu6QP7^5E)VKzHzOi}Tr|x!R z*4=}I6|s?9Xvwz%Q7>Ds8;CilXrH|zsy%G*q5B*KxSGQ1($cPP(;fDJiIDBwLD%C} z&KeyseP{n#``V*S>9KCQLZcarw4#e#FoasiB%$zXcMNwn@V4}mz
  • wfmOsh;)AT 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 literal 0 HcmV?d00001 diff --git a/test/test_manifest.json b/test/test_manifest.json index 6d07597d8..41947059e 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -489,6 +489,13 @@ "link": false, "type": "eq" }, + { "id": "issue7769", + "file": "pdfs/issue7769.pdf", + "md5": "814f167b8437eb8e4e4b6e89743011d5", + "rounds": 1, + "link": false, + "type": "eq" + }, { "id": "issue5044", "file": "pdfs/issue5044.pdf", "md5": "44788cd31dcb4a2495ded34a84c4a765",