From 6f4d037a8eed3fc8d1f0d824a57784533abe9a72 Mon Sep 17 00:00:00 2001 From: Calixte Denizet Date: Thu, 26 Jan 2023 13:04:48 +0100 Subject: [PATCH] [JS] Correctly format field with numbers (bug 1811694, bug 1811510) In PR #15757, a value is automatically converted into a number when it's possible but the case of numbers like "000123" has been overlooked and their format must be preserved. When a script is doing something like "foo.value + bar.value" and the values are numbers then "foo.value" must return a number but the displayed value must be what the user entered or what a script set, so this patch is just adding a a field _orginalValue in order to track the value has it has defined. Some people are used to use a comma as decimal separator, hence it must be considered when a value is parsed into a number. This patch is fixing a regression introduced by #15757. --- src/scripting_api/event.js | 3 +- src/scripting_api/field.js | 17 +++++-- src/scripting_api/proxy.js | 2 +- test/integration/scripting_spec.js | 74 +++++++++++++++++++++++++++++ test/pdfs/.gitignore | 2 + test/pdfs/bug1811510.pdf | Bin 0 -> 23841 bytes test/pdfs/bug1811694.pdf | Bin 0 -> 6805 bytes test/unit/scripting_spec.js | 6 +-- 8 files changed, 95 insertions(+), 9 deletions(-) create mode 100755 test/pdfs/bug1811510.pdf create mode 100755 test/pdfs/bug1811694.pdf diff --git a/src/scripting_api/event.js b/src/scripting_api/event.js index 30b5b1878..6a2047bc3 100644 --- a/src/scripting_api/event.js +++ b/src/scripting_api/event.js @@ -249,7 +249,8 @@ class EventDispatcher { this.runCalculate(source, event); - const savedValue = (event.value = source.obj.value); + const savedValue = source.obj._getValue(); + event.value = source.obj.value; let formattedValue = null; if (this.runActions(source, source, event, "Format")) { diff --git a/src/scripting_api/field.js b/src/scripting_api/field.js index af67c9931..869822222 100644 --- a/src/scripting_api/field.js +++ b/src/scripting_api/field.js @@ -251,14 +251,19 @@ class Field extends PDFObject { this._value = ""; } else if (typeof value === "string") { switch (this._fieldType) { - case FieldType.none: - this._value = !isNaN(value) ? parseFloat(value) : value; + case FieldType.none: { + this._originalValue = value; + const _value = value.trim().replace(",", "."); + this._value = !isNaN(_value) ? parseFloat(_value) : value; break; + } case FieldType.number: - case FieldType.percent: - const number = parseFloat(value); + case FieldType.percent: { + const _value = value.trim().replace(",", "."); + const number = parseFloat(_value); this._value = !isNaN(number) ? number : 0; break; + } default: this._value = value; } @@ -267,6 +272,10 @@ class Field extends PDFObject { } } + _getValue() { + return this._originalValue ?? this.value; + } + _setChoiceValue(value) { if (this.multipleSelection) { if (!Array.isArray(value)) { diff --git a/src/scripting_api/proxy.js b/src/scripting_api/proxy.js index a1de00278..c1f6e7809 100644 --- a/src/scripting_api/proxy.js +++ b/src/scripting_api/proxy.js @@ -63,7 +63,7 @@ class ProxyHandler { typeof old !== "function" ) { const data = { id: obj._id }; - data[prop] = obj[prop]; + data[prop] = prop === "value" ? obj._getValue() : obj[prop]; // send the updated value to the other side if (!obj._siblings) { diff --git a/test/integration/scripting_spec.js b/test/integration/scripting_spec.js index c60feb1cd..f335fc1b6 100644 --- a/test/integration/scripting_spec.js +++ b/test/integration/scripting_spec.js @@ -1780,4 +1780,78 @@ describe("Interaction", () => { ); }); }); + + describe("in bug1811694.pdf", () => { + let pages; + + beforeAll(async () => { + pages = await loadAndWait("bug1811694.pdf", getSelector("25R")); + }); + + afterAll(async () => { + await closePages(pages); + }); + + it("must check that a field value with a number isn't changed", async () => { + await Promise.all( + pages.map(async ([browserName, page]) => { + await page.waitForFunction( + "window.PDFViewerApplication.scriptingReady === true" + ); + + await page.click(getSelector("25R")); + await page.type(getSelector("25R"), "00000000123", { delay: 10 }); + + let text = await page.$eval(getSelector("25R"), el => el.value); + expect(text).withContext(`In ${browserName}`).toEqual("00000000123"); + + await page.click(getSelector("26R")); + await page.waitForTimeout(10); + + text = await page.$eval(getSelector("25R"), el => el.value); + expect(text).withContext(`In ${browserName}`).toEqual("00000000123"); + }) + ); + }); + }); + + describe("in bug1811510.pdf", () => { + let pages; + + beforeAll(async () => { + pages = await loadAndWait("bug1811510.pdf", getSelector("22R")); + }); + + afterAll(async () => { + await closePages(pages); + }); + + it("must check that a field value with a number with a comma has the correct value", async () => { + await Promise.all( + pages.map(async ([browserName, page]) => { + await page.waitForFunction( + "window.PDFViewerApplication.scriptingReady === true" + ); + + let text = await page.$eval(getSelector("22R"), el => el.value); + expect(text).withContext(`In ${browserName}`).toEqual("5,25"); + + await page.$eval(getSelector("31R"), el => el.value); + expect(text).withContext(`In ${browserName}`).toEqual("5,25"); + + await page.click(getSelector("22R")); + await page.waitForTimeout(10); + + text = await page.$eval(getSelector("22R"), el => el.value); + expect(text).withContext(`In ${browserName}`).toEqual("5,25"); + + await page.click(getSelector("31R")); + await page.waitForTimeout(10); + + text = await page.$eval(getSelector("31R"), el => el.value); + expect(text).withContext(`In ${browserName}`).toEqual("5.25"); + }) + ); + }); + }); }); diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index b83117441..d69ba9659 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -568,3 +568,5 @@ !issue15815.pdf !issue15818.pdf !autoprint.pdf +!bug1811694.pdf +!bug1811510.pdf diff --git a/test/pdfs/bug1811510.pdf b/test/pdfs/bug1811510.pdf new file mode 100755 index 0000000000000000000000000000000000000000..31da02d655fb6392f312bc9a2270a17b89fac9bf GIT binary patch literal 23841 zcmeIa2|Uza_c$IRS&}HFZ73nj?3;a$WXUdDV+=;aFf-Qd359lTw2%;`lxRcAQjsi` zP$VLxtR-##J2PgQ`goq_^L)S0_w|4MUax1=%=>-c=bm%!x#!+{&UxQ+6|9X+)ZpqE zaS?^AYc*}+B1i}fLiO|$7tzv!ZXpHuFnl3MBoYO+4fbS&2a=#p7F(cp%nJ(=gWyGA z5Oj3t3>t~x4{GR!1rmrmNDPQ4$%h=EE&uU$r96b}r7iD>wt!g#8j^g;rV%ufZG@#A zF=7W1?I3ACO!VpjdLJdHu(Zd56gfO)L`Z_ie z4jv;Cok$}GGRV{b2oo>ClN!v>mX~J|;(lfu<{!u<6hK#JHBy~O^@oNL0-&?{FgmgQNqx5vd0H z5COA;V>FN`4Kz#z2G@YWw4i@L{t`6{hau2L25Al)FoXsI&5MHv@(&yw<(>n}Upbi_ z2rSq?@USRQX?9d9MQ2tD5NjG0fNE&C7`fso)|PijQ~S> z!tex`7Yfa89>B{}mj^Fsi3SjdS1^%8`-k%R4Tz`mtjcKsrhvKtO1~G(0U1J~(SZPU zz?k_3%_*FP*Mc%fG0&)GPZ_LIFlT`I3d)_Zc(j*0)c^ArzZ&wN$IZp~Um{#l{GE&c zitF!4i3{^zadAcQcP{=buD>HCF3f+$#TCWhx%jWR{*IKmF#k+kJT4C@0Qfnfz@ZTr z0hb(?2wbw9DJ+jyWk?MUU_jtd6Ecm?fZ)Ir8whj@;ny|Gy|M~sP{;u!x(*v53kwsL zA zuYfS!Y;e!%Wls08nhSw5rNit@rk`yHd~6EU=QkS6e&h6`en0?~L5E;w>lgw_GaW++ zhRFy(Vo0L~8c@Srz#R-gA(;K_1{m=o6aHE}t4tgQY)Eu!FpWr}Yia4|Ky9c@OB(|F z)ibC z$^xDPwV**Tvw~wGL(EEzsbvtBO4>klzy}N^5{0QdNVX7wdj)9PK-_-gk5_T@^#K7B z2nxf3gPKE7?C}F|>05(GmJl497AWAh1;~!w7-eQvsEHlaE(~g6&XSEacQ9=QL)(T# zWViq>FzQ$|2DAYKd_6n_0iqOe7!HC#pw!_ABp7G2F%?I$mk)^nwNtVqg)tC#lrmew zte%BBD4|sm=--AhOAZ`Sb4MdnL?i}q61hU=$do-cna{Z-|H;^7bp!{y5!u@t%q76< z1L8%Xpq?~R2nk9g(10IGB-4PS=}jSpLA`)#5Q#wVpuWKYJ_K5@KZOv?fKq*^0i+#J z8t8B+gG})vL6CT8P%xE2qJts|34+H!eQ1Ob5(JLGK|R6b1H|A(@bMwhW`DdqDInHC zAqUdQbSTN+i$M22&O{= zNi>EpHJDBa@M5z8(0hW}jC;eX%3=^aVb^5c{VL}vWD#RkXV3^J2h^Jk_=0Ys zQ0~H{4N4_J>Fg&FtRD!N!=T2&AXEUyprFKH z8nX|=!3_p<0d)r{z>`1&cQ_~)F_9V=&Ss7ZJXjKFFjzhya4Z4}W)Gkh6fjLd)xnn+ z$s0-o0XjMZu;c~xCxA&R0P02Zp^-??KuR#3Eh|PSl^zTPMyArB3}5h!dq*G!Ge}VX zUcm!0Rr5I3sHZ^@7Wz%P=5>%htbbXeB=^H~0IpmGmm5tezjd>~?b8DHgVa(Vt zW;`%vTo_}9FVvDv&Wa6g#Rj+H0k@h3;MVdFrZC8XlyImOyL0W?RqfeT?Rl!&bL%*> zAKLj+X#r56|NcNnJt=f3fnArteoWx03sycbqCnJxqgn)(7zki^a>M}o6bvpXi109b zjKotJbknRtlG!k1HVl~uhRlT_0Wk!y$x+$hR5m!32b?+!z^&y)4j}^uscazxvnvL( zD+cpa4CdAdXFmjE6bK=lQ#@-5a8`=nCUstmW{#PV8OLEx7Xb|Bq5`Hc6nk2C2H%GSmmhp0c5aRksv7ca>AaK|1@P-YYu0+{MYLWlDo|PkJl9>5~hwu zqrkd?Q^z47NE|{P4+F~#bGbpH{^7Fn$Exz<=REX0^?8VSzppJU{y5Ds;93Z15U@le zz;vRHhXWEOWD0ZinoyXLRuWT4VAZDiGglR`{LQ{MfWy#G3j%{i2F3?-VTQ54-N5oV zYgRyzvlb|4C1fIDi`mJ_(+{kozuqo{WvZpZMH2KD&-ZAGc{h55c*;3+v8^%k8lRM{ zHV(HdC99PwJzUYHLm(usFPG9>zcg-oo>9~HI{HM~X%IkN$)3qaZ z$w%GaAt`x#v|=$;?VX3%X=Kz@Io;FY{>zo-G~ii`a>T+^0SJ<9JMd~FtB4B(gMb$g zEECKG4ncD43l?@346BF({daU1$wv3@=`M2C!C={vf6-lDk7ABKo$W{z4$j*TZb$9~ zoP$Xle~#RZP1jHne(~gzoxPvwauU3?U{Jz3&?cuAlB7ERSwN?xz*`c(fd2i%RK5AO z4;anvw2e^4LkULI&Z74oC0 zF#dB#{gpd~b~74L`29Tv0UnrVF7LiWpWV8DXJXYh8I2gbvfIzU6tBG8?eeuA7I~|6 z(vCECV#41wZ*R;{4>gLm@%zZP9O|2i>FE&-T>2(=!r4KW&^1G~yF1ppjUOPj_iwc@ zx7TU(`B8RedD@5XO_5J~>b|xjY)>1XJZc)+w3;FD%22`1AoCD3kCLTkr*EGVFCw^f z@6wWZno^QTek>|SPGE&8Bu>?99eJZK`;Q@e$|O%_bvwF!N@{Zcr7U!{g>QfXUFu{8 zEC-!~w!_+C`;e?ZDOb@V!Bc0Y81a@(53_sS6Lw0DFZ_}aX`mx_=780^OHD3v2M?IO z%WbmA$}qsHeNp|Qs-rgdU!!WHYSfiU!s8P=8ehJq?7F75)8$ja_<)^iQUFJKr1_$YCvS7k8jnKlP4T#5A(PZ`X%;GG8REfxeeYxQ%&?o=8C zHEZ~DW(Gijsl7}!o^?Q&w@^ngrQ=;7Xf(zRg2Hhwu)tQu;@lu;*lYySa89rhy&0pRuO0pJ9thDk)VVP%>-g{ zk7r7OO^=CyDGxY|OApTB9>--B&Jh5XBN8|q;9#|bOArN~vD%8}AjJWOSzKX3Q?X1T z!{GpkMH&N8vN=XDp_pu;na|kFfJFetWDtSiv;qs@*$)v+xv{uswwgr|4&$^D#VJAo zDE2c1Qz9&QK!}C*H(!sXJe;XjpJ@UxAb9XrSU?#A0t{#FB>rol z@UA~BVw`6GMh}N~ zmjyL`>HS>yIV$3`kM{8GPq#*{BMEM|5r>OX;Zg=3GC!?etsyD5J{EftJN)JK>G$i5?q3cMC3L#H|Cr(boio_rnX2R~O)H{*WNlSBmu+^W+|a|Rcx%JSH19L8m6*i#tHllb+OGvQ z#Nn?(k0Uc0U0-ycP|0}cUEEGt<8t@q3xodq4ls}Yx^K?&M7{JW3NAGU&dWu8BvlU? z7o#a^E_K=MLJp5VT&ufyE~U%5W$*==5n9fdI<-z!o}&0vvPddgPSQ4BQSQX3CNXzw z!r|2561FBme@3JUxP9N~H$m zW?RdJ%^lh61rc6{R-tw-r&#t`LD5fQPoYfhVNT|p!u_iS&Qh=%W5 zeaRFEMt-l~9q|{5*_#85AZN7_E%h*2%Wt_jrMR!h&YO6<{z%lrAMQc4tC9QHFW7!3 z(1ai)RHK2Md6Ne9h}CLp@2Y8*Xo`zD{5ij%nD0vOs+a^5QN{`h=`SMTT}5{em2P!+AR} z&lBzS0`2cU&!^lK`*9XgDY$>$kAP6eie00Ej{-b)*Ef$UB@Vc2NBmGsF!`plSW#fn z;oM=Zt8&eIJ~nima*GdKyK>--k=`c9HmiqFx1f>XK9MUaSXs!ntywkajyL?wP!FB1 zn=G8@wN+C0Umd+lw>RE~@2!{mIipf}`D(S(Svoh2B{a%Iwlvs^^eu0GG7P_Tf6?0H zXr&q3lWFPwSYNVv6S4!kYM%&JedAR9G5#+l`-;A~%R`H_wnp>ysJlBS9OCOxT}4e> zoLK7e{NSRDzQzYR!yD6m;l4)bn;zb8yq!}pv4*1F%XZ$qH;5f5hYal>OMI77m6@+* za@~C2>r}eK%o9HGVvLu=+h=+YpNNY)E_tfZLFN4LM zA4XPMB+!DEeTiD}=;zt}JG#RrBpGVo^RPD!^6W#N_dg5JT-evLdP1~(@6jrY!H1-R z8PeIUt>Sjo(S6UtgrGV&^Vv@2Y(k-b42XtCohxM1VK0BKyHMA6-`eJm&!sGngocw&6cdVQWzTy{4 z<^Q@c-Q(HUPFF3AkyUxJaM4bWn9kxxy-nW>6$KxetgDjv zt~VL=O)cMDHt+KLC51*Jf(?@O=gB{4Vb%@3jnjLBXi^8)ZjxD%(h}d`reb0yDrs;C zGd*re!V8ur*VkI=dPMDT)ohD<)ZX~ag?8@0Yqv4m&QSRE|0X5+f)M zIBE03wy}Xd+gDuAP@Wbzt8M~)dGKz~>F3_U@d~-$vM&fEg%S0NRw`e2os@ocVe)lA>ujoP)7CfKdbYAD>;b-%p!&NjCS)9q!}WJi@z^pl)L zgRNsHb9rZ0+NJ02XsO8nq zrOjQk>fZ9Yd&O5+e0{ym*&tHX)8!j63d#Uc`kdd}0B z7_qFtJ1RSKZXAB0YX7SAXR@BC%m%*=tG7hU)!l=(>=i{`y?QxtAV7ELN70uTN)gS4 zS4QObeu%|>55OI(YRM+eMBZsJd+8{-E+cOFV4L;7+$qOwIbq{P<8Uz9nJ5AafIysORGFfI(l}l z#C)()Gl$Oaw5T0ld{bzFwW@J;7DRne%C5RF1u;yyzINdS%4KC=>0Gba_`yb5>}YbS zWoql)crWrzzPH=&23cG)!ba&nscfFVB51`y!JbixK0@Bu;=K~SX4?4DUX`1vV(xnn zUUhkc2s?h)IBwP1v!O$KAu&!pXs7}|LEhwP!R^}gqc0OL1$x%M{bu+j_TH)f)NHk} zt0x`uDsCJtT@Y8gCPh@KD%tbt{ALTAH~S6OexCM?n#l3(Tw%aCmdm#_|8-&Oh}GiL zugx}f?0ev2nAdnFw{+%i%jm{rXh+z*wQ*S;3rIJ%TEK^o^&zIpP-&uu(@W}Bne@EC>ur&iI+Ac8P;v7vvv;m%RA*v4zL)OZ)q?c! zze#M?Kh;=!Na*XCq~sv!-XCG#A60bU4beP?_RK%@%5~=eHs{1hiN`^iJ`=Bt51k~& zjRww6HC>S!UPcf0^m}f#C3w|-l0#{J;>V}bx%xl+E7VowHDjj}{z>OWjXD+i&?sZ=k!dyaM@^A*U3Wb5RG2t=hmSv56GMDwildP<{tc5Ou=mt&U~A7 z@Zk}|4lio3?1kFIm$yF7OWKiSZjN3y)}8xdK~iM2g==b93xI4F(gsj%NUb!#QD}K7T;`+Dh zDgIF08jH&*1&Ie{$hT$W=f8gcSkzTnk*+y$x$VsRE)S7l&B^_mAx&pi&nP~bl2HBW z)^L1vOmI(sS^tq8DxquQ+%`RVuW8W_t8VtYfAFyoy(sA0vi(NS^h|r7zDijf-=zGd z-fU*?jYdV;Dps@poK(j7ynF9gU8j5&Jmqx0 z^lE_8EggM$im(YT#oe#OFJFZLI z@6s{Rm86WFd)}+}AM{`QX38N_csgmKjkaA7_kQ7nn%>v}D)o|H{@wn^or+cWwNATU z?@6~4Erm87-zW7z{geD1f9=S!gJ;qTla1HjJqvpR7w&By@U;e+i@3~bgUUd%4H zPu;Zp)=%?SubVrFuo+lpk-eUebspJxN6(_yo*+Q;;LVlBs_Jp zr*F&JfE|P74CF|k@85Me-?6=}-sJS@+&xz2{1!HoM;PLijcJAEokAJr(_ukJ_sg9R zi7}qcb}f+3S>~U6zncE7U;nN7gNA1B9Y{UZ=A{$GCChEw?-HY=_zy*jrI=~m`n1Z_ z#OwJ?jr0;1KZ9)uqg&Mr9_u-!z@3AfulV0NNWeZe8ai#cX|Gpb#k&i8T4FKle9Rq| zy;o9Ie%!zxWI7@?5SFx!ZhJ%6W}wGlq*(00XN`!UOh2upz2Vg7DnE_S)d_m8QMiaZ z#ivm==s9MfY~;SbhODqB&^zjaOrv1QDV?N<2-x`g7Og!p=ilaj%x$<{>+@4jU!i5W z?Vtx=k3!Fv54%UNO!}(1pMQ|i@yhziiI}?f;iH0a)KMXiOf$uYBGFbBXGHd?rPZyK ze|e8y|4gRn+R-#)>!e*)nzkbu8VY8I_oC(}c{VHxPLS!QM-I`pZ4|b|`BGc@}G((23k!HV+eow~37>WMGVp?meU>>g_2+i0Lq(;!Mrl1-Z zaUC8Z=L9_F#Yy^oQ*q3O32gLPWzes!G|7>!B63#g%O@9%-@1x8& zU;7a`+Udus1MOnuo82FxumzLo$;bE7hF*NZ+%S(3PqSV7;pvz4&Tk7wPL4_SHf0XW znYAeY2)v#8;m+qe_oZ5G?n!T*&$pBfJ|T%=gMZ$-)MfZFCja^Bf%Icdx0=2jzSUjU zxc^ny*KHcENj;Y}t*&iMp*NNVWrlpSm#7@RW;2>fRKpRUgSm1ovfB(Lngr|&6pW5W zKD@ds#9Gk)ph$?)i!3L76{RFveyoV8p)BG+-25dE3^0eh7d&2cay3fRm*&UwH>99A zkd2r5E~ag`(pMm8^GVy5%tQT0#1sj*g@&ZWM`9m@LJdzPY6z~oXPPYaCIKgBnS5Ab zk?uXKQK@h9**^(8Wj?s^+?MHui6$_=R6i^WP1#j*@6Gn0D>$cBs*9E_;N05zU+AE1 zI;z=mfNt2RmhOLnQrEHXdcn6Y3-h+>+LO8x9+x^?4Ub3QqgQ$6HEMTQy!!ejYsCy< z-`>i;4*>(6Wh8R$v5j9Aq{zyCn_G35Z;UvqGe?;IKOgy=-MI0uBcD7WI8J=;SHKd^ zjj3^ig>d+6%^$LG=Bv<5!|pK zH;M>{aRQ6n5G^+{J9p%i*-~cY@9%_txzS#3kQW0azzT8l#7j9*QY^UmJ!tvY2roBY zivjIq$3g$C@aeBuE;m@pj0&?Oquk&uH!#W#_`{mdvpAF z4lXt|QH*b+FhU7&>3&W&Bwks`V6S|#FK%(JnQWs7Ud64jv+Xc>c$#u6YFK;Vz~`=k zofW##1Ek8G)l*$DI6%+Wcv7W0w)?=eAI}uQK`BKBZF`CG`=nSC;c%TJY|UTI!0+@EHW< zr;F*=i09Q0=~ae?xzjVdjnvapy=}&{VhAciqMC4{JL?kn5~|$AWENFzO>?xa3sn8zaTFqkF$$l_DoBvl`Z7pzi!Ei6o8dSO;-%)+sk zHnolhjO#=%c!gAUC!%(1t$^G`=c7}?wb2gO*WEu8WSRWIZN=8qR)ag+?;o$bA!j7v zV)tFKoVKvi+<^a^qbMxv5T*kf)~x-S26km)ToAuiTj_ zo9FKR$Psqh^}wyT6UD_VW5%9tYBX8#`pr9y7MUiq=!!4V_J-QqJI%t^s>v=#e()WF zKYDDOVZKdPF7*DG;mwtCLRQ{^aoG?xV>y)#q`ZF*bg3psO6 zb9krd1?cw2Lmf>b!Uf~qi%*Cjm-}eff2!_#Y$g7s-IH~9_7_Yj68wZ;?mu`_Mj~@& zQ5Ik2qPsz{-_xHx3U5E~PPNS2zg}JcMw&P>NbI#Kwk)(={ZwGh;T(~`Yf5LitzHU(}@K2XT)&HyZtDT-&BIbx7cg^GuRVMwM?<>GOc1S7GyCznW^7*E8T1uoXoN|rrMJ(Izo?SE1o?kxNDiojZmITPxWs2g;wR(f2@iF1p2gYTso8r>Oz9 zuEph@rvs%;w|RbhXg9wj`p~8R`xj)K@7^f&S}}O?7N*PbNm<_$oAGt(@v=J_4i$8J zAe_60mqqPZZ($rhZx|^XT6O+vf%l!7pz^Ch(MuzzcS~84T0c&gouwIuixdW0!H(?q zpS-_4q%LLXrkBJ9q~Mdiq%`qBRK`+lM8ojwar^F@y4kBZs8 zc;jQ)zGn1$#EC7KM?-rflD=rXw%%m7`b*~bhy90>>f?lj-1pWVj6GKu)+yg$+^MG1 zMwlu(a&?mbipLH!iAU&_u~BAw`V*#WrO!%VUR&U@b1>%ck~hE&62N5#$p&Mlj@?m7J0N*X^59ybpL#1Iq(7f5)N|Z(Y1&E6Yq!ky zgrUqEi$82IedKuA_g(tc^-U5-RZpj{+6NQ5zhg>0q$e`qyAbZq4@y^;*4?uq!9w&D zox-GNG9NuQzuI^AQd2*wZQe3?7%JFd)%3ci&UHE+b`9;Fi@arC^$jM7pduqnrgnnJ z-viTt{gi9bQo5NrWv63Xu7D`4Yx&BLyYQWeE2Tl+Z8X?o<{w=cp1H(~?3J!Kg*PYzhHhF8Qebgx_YIAW?!*(SZ!TU>?iJHLGI zsHVe<*DhN$oSkcS%SWc(|0I`2S?gQd)9f{89V^94Hih>Os%^(< z47R=r?0+408Jf0z?dPg`nUEi1pE7a^vZA+z*p8%~Iq37?T*dAbIjj~j+(bJ6{>ZLw zw+XN9nJQBYiyorxJu}lf?i}v!7`bDc{>DDHV=C9Gu6=iQkE#BFlW20=M>241zu1;^ zb6Mf4&n-4b)WnlDQUb-PBl$OlNt=*sJjET$@P{;|E!##=1KBR#!V|PA@}tCS8NnYr zv)!BW&iP$@a_Or`U@Re4Hs`DSkNP8Sua77~o3UDApD0?LsiWwwZK;ozH6g>J^PxsU zU!opGyCmpnR(;lQB49!)YNETh)t-)8^4a@+r^7o7yH)1?W7n@S zy_|9p1Z)qNKGq+t8yxn&9kivtw9ezRZq232<+5eR-OK!YbUU|Dqv7Sty_6>hRB6W^ zAoJFzIqp6*zb$96-$B%we$!_s94j83(JlL`E9mrQ=rVuQ^Qyqx)g29wvUgcq2j%w( zSGhHW)Oi7u<~!78uokz|j*D@sj6+9C6k zQp{R{R>bsfb=2FJ3i#Sc%r)_h)9qJYTHg%Tm0pc2olxquhAe6>%<)4^RIDE}f4SCK z;GVctSyaN}e`9b=MVH3 zR-SsMc|&F2PsY71PVXyf1z$bJ#=~`w#q4Q{cho_p7lj(8Umx1@I*ytymv%j@!Yusc zv&QBfj~nmaub-UhTydfGvuUf-T|JqhqNEp#Cr?SOB(#jXT-Yxc6IQ?MoML_WkEbJ@ z!ULm+7HrfuJT;=*v!R+8va|&T^GL2JUY=+4W>4DF-72k%URIPU@jVK7@FMM=ams;@ z?t}@4nd9?O8S{@foZV!G7k`F{IFhf9N(tV%8j9_8yW8!iV@tJ*Z4LS9sx?1sXeLo4 zL4>lcj4bx@mFnRF2W^Ll^uay08+v`8n}3sizC_UD($Tu!jh@XbVX&w4F& zaJ9}$PSIRSs!N`cizBXABeWiv_`<@A9!l@%+pxNyrrg?RXX`!u*l6`(9KYM-*S3I{ zr^^+j-eh#DoL%jw_QXa%-E7iIG<9LD5_Lb!vaaUcb?qOJi?4Qf9;ABMkv80x4~o0D zBT42+MCN{9y%)RHPAGmnzPT5d;{2f7&SjA3?f)da#rV{*9rC^WODs%W9q*KC%_!yX zd#cn;C}Q6&h|JORcKv}8@X&mU9p9O|=AqW6v#W~s)tBV- z<@YT&729lKy5|`_Z&}XU4Ig$*X7*Jb(F)9!x;44AKtDGxwRaYxVC+}KC;s(d{Vx^b<(_ddDK1AM4%C)K10!bQ9C)G4!3 zk6wSBEpOtMD(Wv>=Ix`gh0omF%+w-YxNZ8bvakwlgNnK+X5UrQ7qz=Gb&^NRRTrL@ zh{!e0jgwpF6XmdsqO8OW{&o}|yLR}h#gm&05Ajc#8^`r*7s_|>f2Ckq;@VGs-l{b6 zQ44y?`{AyK4&%lJQKd?`9@qJgC|=2{{7L|{MX06 zZg!b?eXswL^Ledyv4ehR$C7KyR8~P^db>9r${f{wew29e^$_XXmVGS~uk))bJ{-Ow zW~KjeBc)HMy{4quTcvsIqGmVkGVxW>t%+Fm@r`vBZ(3`9Rwn!WG>vSI^=1<2y zdbgqaCx52>QsKEnc+9Q3oN&ixTP1xH%V2*`63v6T-I%~|RYHJMLsTI!)<1c9RS1I? zOmbD$1bY;rn+YKVTh<95zwNZ*P3YsrXifsVAejjo{}ZIVyK(<_TdzU>#6RD8%}jp+ zK^O4D+>i#D&8!03FhQ;x(U!z;VWww6nfXXyV;wgd@=v#CFRj)TiG?i|y!+$Sn{<&S z*WfBIHpW|s5blXi^GWK9j!nOjw(Y3L1Xl}YS(g{0te>KnghP)9W}}bXr)eG0bLqLM zpKa?g;Xy_s)Z+U~R+kfu&S*r^T%^{_*{Q6|Fixj(7- zrjAGAaA+LJa%1P~DTRWAQRuVDigTqjB2h3TH>DBe4!|IrfL8l}|8_*?S12=x2(gO* zSwZR`QEdyejL!U`fgC_)Djh3*4W!}ODtQB%8W2{;!x8GRK!zr>M2(rW${_k`STaWi zMH9jRy{`r~CHe$tF!P@@Aw()jxzbn%c5#9a$mnBc!I{}XO+a!GQ&X4%4W)scQySFb zw`@!#3WedaZfT)}@kA4eV2`C55v0YbA@L}b8lHg1sUfj&q8Ap9f)g-!W$3SzIvYbJ zaJG;?1u}b9hqgR8EeE99YI#zfpwq` zo#+eFx1iuw%?qSkvd^Z0fLjfHYcmJ-sUhI-A&@8qQe8Dzhqu50PVk%_NCF4+03oU) zoF~c?gY?9D zdH;8CfywUwm%+uWkNL~dC!5HIxAM}sk zjQsX;Twosf@Xft6^S)?tWM+5pERwvo*e@dogH>mq3}g)dOB=^HjIqg< znY9iK9UB<<(l@h(coQff<(GH5V9h*SSdiY#U7uO$<-9hL8+0}^4Ir~{G_hiuL=X%o zyX)`TO05zIYg1@{%V+V>iO_oJBm2OI1N`%F$%6am7AUW|`9BldCK@$35b$gZwWARN zz~s(KC3N~jPhZv8XMSAixE2zpV`sbCb*FcVE+OPe{uFxIb|6@Ahi}K^+h&W?$M2~hsSY2fp2_`m zKRCzboOZe3@_Cz-6(#2uId7)dAA^@=&2rY_UwQ~;DI_>b;s4RWi)E+i{2PkHqQIZ7>(90=dXd zQKzzxdbe8UC3(LT;VU!PwV+99T0t^%So653slJ+syMn`UQnAHG27N1Zcdlpq1@&_J znz8EnBtPew>1l!0vgUVCPQ~IELwmm)j;t8yzOzb6TQLZlD&;VR?(SOMyI1Z?ontKD zytZsPi#dlYNC5v8+hC_+gF{^W!HF%v>!Sqw2QYKktieGKWFiBkRl*Tq%AZ5XW=1Yr zaDA*1!pI1mF@ZBe839`!jW#gQH!?xO^>G+D4x^)mgkkUoXcK({7zT;Ln&5E8CP)*o zUBbu&V~j91f$6wGnfaegSCf_aJiE3a5a37@Dis`h#M#;ed?T<+Xm)9^0S8hzf;})0 zux$iH8#ret`F44F&g0)O|K5Xj^>-(K)`J)Q8-&)vQY1~jeO<7AxxVKXu`NHBV+5|7 z^$YA7_^kiZ;z2}~P+0u>(p}CCkm8ud=VCp7!j>*T@F_h1DRA|h{>3zFh15endLbqA zUMW5k@X}TxdCfq}-|9Ar`$3Xk%v)G%r5EoZR*hb;q+u(>P?vvU++~P!%wnvt@7)iZ z#WpR`pLa^g^Sfb!kW_0-S$?J7Q9jcxvR;=F$x~w08{_uCvm5UmkyDxv+YWBa%y~i)5?{eOHx3(HjL z6X|P_xL_SP9^AjNk0#OsY@7iEsu_u%$8TsZD5Xs|UuSM^PTYM!T0Lt2(@cb*;kw-i zQ0n5gtJm3D>^`8X-nRJciXy%5^J1kI@0wFWVKkDrxCl5%0DN&j!1Y9f{Cw~L$@>5f zj3(v>5+E)D+*3{sB#L=r1Lpzj0)|8b+w(7FOfT~fI1DpT_D2~OHb)sVg2aIXT94pT z$0K;2us~oa7;hOkM~T}y6r8!@a`1pi6q17n1rCAu^<)+g8u=GaP#6S{7{Gx9T-<0J zZ(D#&em%j1!zH*>!GREPG>0q(&f73HSqzGqZp-{ICCw?r@{pY^L-P`xEyM7VVwYhN z;EW{Jr- z1?S-$oTCJ?rfICh$A4Q$=2$&I=<)BZS$Jc87{VBZhhdR$psE;vxzP##SccBL5%sB|gvq literal 0 HcmV?d00001 diff --git a/test/pdfs/bug1811694.pdf b/test/pdfs/bug1811694.pdf new file mode 100755 index 0000000000000000000000000000000000000000..1c5db282666e9dd40521c3a96cbe62373fb34be2 GIT binary patch literal 6805 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 literal 0 HcmV?d00001 diff --git a/test/unit/scripting_spec.js b/test/unit/scripting_spec.js index 87274f7ee..bfcc10a56 100644 --- a/test/unit/scripting_spec.js +++ b/test/unit/scripting_spec.js @@ -346,7 +346,7 @@ describe("Scripting", function () { expect(send_queue.has(refId)).toEqual(true); expect(send_queue.get(refId)).toEqual({ id: refId, - value: 123, + value: "123", }); }); @@ -826,7 +826,7 @@ describe("Scripting", function () { expect(send_queue.get(refId)).toEqual({ id: refId, siblings: null, - value: 123456.789, + value: "123456.789", formattedValue: null, }); }); @@ -1006,7 +1006,7 @@ describe("Scripting", function () { expect(send_queue.get(refId)).toEqual({ id: refId, siblings: null, - value: 321, + value: "321", formattedValue: null, }); });