Merge pull request #4809 from Snuffleupagus/bug-866395-redux

Fix loading of fonts with empty font files (bug 866395 and issue 3522)
This commit is contained in:
Yury Delendik 2014-05-19 11:23:54 -05:00
commit 5cd6483ebb
6 changed files with 30 additions and 2 deletions

View File

@ -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) {

View File

@ -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.

View File

@ -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;
}

View File

@ -55,6 +55,7 @@
!gradientfill.pdf
!bug903856.pdf
!bug850854.pdf
!bug866395.pdf
!basicapi.pdf
!mixedfonts.pdf
!shading_extend.pdf

BIN
test/pdfs/bug866395.pdf Normal file

Binary file not shown.

View File

@ -682,6 +682,14 @@
"type": "eq",
"about": "Seac with differences array that messes up mapping."
},
{ "id": "bug866395",
"file": "pdfs/bug866395.pdf",
"md5": "f03bc77e84637241980b09a0a220f575",
"link": false,
"rounds": 1,
"type": "eq",
"about": "Font with an empty font file."
},
{ "id": "ocs",
"file": "pdfs/ocs.pdf",
"md5": "2ade57e954ae7632749cf328daeaa7a8",