From ea0453f106ecdb98e43bdfb8a0fa2c4cfb009f06 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Sun, 18 May 2014 00:31:47 +0200 Subject: [PATCH 1/2] Add isEmpty method to Stream, DecodeStream and ChunkedStream --- src/core/chunked_stream.js | 4 ++++ src/core/stream.js | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/core/chunked_stream.js b/src/core/chunked_stream.js index 6c0c16db0..8e402172f 100644 --- a/src/core/chunked_stream.js +++ b/src/core/chunked_stream.js @@ -133,6 +133,10 @@ var ChunkedStream = (function ChunkedStreamClosure() { return this.end - this.start; }, + get isEmpty() { + return this.length === 0; + }, + getByte: function ChunkedStream_getByte() { var pos = this.pos; if (pos >= this.end) { diff --git a/src/core/stream.js b/src/core/stream.js index a7d5d3456..f2996a66b 100644 --- a/src/core/stream.js +++ b/src/core/stream.js @@ -35,6 +35,9 @@ var Stream = (function StreamClosure() { get length() { return this.end - this.start; }, + get isEmpty() { + return this.length === 0; + }, getByte: function Stream_getByte() { if (this.pos >= this.end) { return -1; @@ -128,6 +131,12 @@ var DecodeStream = (function DecodeStreamClosure() { } DecodeStream.prototype = { + get isEmpty() { + while (!this.eof && this.bufferLength === 0) { + this.readBlock(); + } + return this.bufferLength === 0; + }, ensureBuffer: function DecodeStream_ensureBuffer(requested) { var buffer = this.buffer; var current; @@ -213,7 +222,7 @@ var DecodeStream = (function DecodeStreamClosure() { } return new Stream(this.buffer, start, length, dict); }, - skip: function Stream_skip(n) { + skip: function DecodeStream_skip(n) { if (!n) { n = 1; } From 3e1db41ddd64be44d3e193d92cd3541a96e38a53 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Sun, 18 May 2014 00:57:06 +0200 Subject: [PATCH 2/2] Fix loading of fonts with empty font files (bug 866395 and issue 3522) --- src/core/fonts.js | 8 +++++++- test/pdfs/.gitignore | 1 + test/pdfs/bug866395.pdf | Bin 0 -> 1879 bytes test/test_manifest.json | 8 ++++++++ 4 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 test/pdfs/bug866395.pdf diff --git a/src/core/fonts.js b/src/core/fonts.js index 6d01710c7..5620cbcb3 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -2204,7 +2204,13 @@ var Font = (function FontClosure() { this.defaultVMetrics = properties.defaultVMetrics; } - if (!file) { + if (!file || file.isEmpty) { + if (file) { + // Some bad PDF generators will include empty font files, + // attempting to recover by assuming that no file exists. + warn('Font file is empty in "' + name + '" (' + this.loadedName + ')'); + } + this.missingFile = true; // The file data is not specified. Trying to fix the font name // to be used with the canvas.font. diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index efd18259a..726a852d3 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -55,6 +55,7 @@ !gradientfill.pdf !bug903856.pdf !bug850854.pdf +!bug866395.pdf !basicapi.pdf !mixedfonts.pdf !shading_extend.pdf diff --git a/test/pdfs/bug866395.pdf b/test/pdfs/bug866395.pdf new file mode 100644 index 0000000000000000000000000000000000000000..26af56bb9188e5594c3bbccfa10ac83508435477 GIT binary patch literal 1879 zcmd5-eP|nH7;jZ{zA!D*O=J#UD;*bIdiUPta>*FQCTVEq){Z1wm8RBP@;14d+@+U` zw)#)46d77Skg=6c98{;^#~*_-oF8MlI%PPiI24tx3Tl~-i4)v#9X{_}u1T!m{`3Nu zd*A2#d4A9Hv}}t+y`)t^L{zYVjh(yDrcH=X4i_or!>Xm`jV$7~saaaWL<|5+9JRF} zs%IFhb5k#5^CEsL&1h=K7{a|EBVbVwuq@y{#D|TtZefD>`?O36s6-4htw5^P%kGxz zWuBOniC0|VRPRvp)zX60>W2%QQ2?x&^WjheTY88;8y7+DnvoT6X*_ z3*acz8lk1MsTD25#KdPy^IO!C70#(979|PsJzB=fv3O*NwEib5EN_ql_zy^u{VmJ> ze{iw<)XQDX$<=)|y#EIt79)Tlq?V{%EIyIwj78%2bQdkHpn5|_J_8BY%t~s53SiOL zu4`!{LotydXK}=L=y25ZEQYM>?RrUbFI?a<)wOW43+|S83)Qn$4l6R_C|M>|3n-LC zgn<+%BVeA`UjwL@%X_?{pG%3N=BGs*s3QrG zswj2A#qi=9Pgu0D10W8aN-;zQJch_DYGM|H zMI)4zyrx8*yHhWGw(B@j=8i{ietP{=txq&@pRO?%ZrJ))!vim6#-cO(!gC)? zwf4S#;KJJMm5o#HoqKm~q2cmJy}^e@VrzdKoSxjfqG$iK+HvFNlf^&3xO?v`>H0zK zzqa-Li4AW&Jpb~osVC2T|J$3tu72*BqmPe0IC=X`XU-L`Ys;TnoF833GIFqS?3Q(Z zY&>#!uzf!E$l291<*&P6xpea4H|s(Zmz!_9>#Yw@kFQ$H4P>Sd%-*{gno@IL9v#}V z{j1nq^z*Z?jhbUPoT6_xAD;O3lfIvxy|`i3i+7&7^z**{J;z_=n)`ph(sHPY?s$Ip z>F>^umuD{=o6_DH?p{2obd7(!X8PC(CGg8ga_~@pe^A9=oJh0p*`<1!0FCLKTm%x(Zq<-vYgmSjAz5&