Merge pull request #5655 from Snuffleupagus/issue-5644

Avoid getting stuck in empty nodes in the Pages tree when calling |Catalog_getPageDict| (issue 5644)
This commit is contained in:
Brendan Dahl 2015-04-20 11:46:27 -07:00
commit 846eb967cc
3 changed files with 19 additions and 3 deletions

View File

@ -597,6 +597,7 @@ var Catalog = (function CatalogClosure() {
var nodesToVisit = [this.catDict.getRaw('Pages')];
var currentPageIndex = 0;
var xref = this.xref;
var checkAllKids = false;
function next() {
while (nodesToVisit.length) {
@ -604,7 +605,7 @@ var Catalog = (function CatalogClosure() {
if (isRef(currentNode)) {
xref.fetchAsync(currentNode).then(function (obj) {
if ((isDict(obj, 'Page') || (isDict(obj) && !obj.has('Kids')))) {
if (isDict(obj, 'Page') || (isDict(obj) && !obj.has('Kids'))) {
if (pageIndex === currentPageIndex) {
capability.resolve([obj, currentNode]);
} else {
@ -619,12 +620,17 @@ var Catalog = (function CatalogClosure() {
return;
}
// must be a child page dictionary
// Must be a child page dictionary.
assert(
isDict(currentNode),
'page dictionary kid reference points to wrong type of object'
);
var count = currentNode.get('Count');
// If the current node doesn't have any children, avoid getting stuck
// in an empty node further down in the tree (see issue5644.pdf).
if (count === 0) {
checkAllKids = true;
}
// Skip nodes where the page can't be.
if (currentPageIndex + count <= pageIndex) {
currentPageIndex += count;
@ -633,7 +639,7 @@ var Catalog = (function CatalogClosure() {
var kids = currentNode.get('Kids');
assert(isArray(kids), 'page dictionary kids object is not an array');
if (count === kids.length) {
if (!checkAllKids && count === kids.length) {
// Nodes that don't have the page have been skipped and this is the
// bottom of the tree which means the page requested must be a
// descendant of this pages node. Ideally we would just resolve the

View File

@ -0,0 +1 @@
http://web.archive.org/web/20140703204310/http://repository.readscheme.org/ftp/papers/sw2010/06-barland.pdf

View File

@ -833,6 +833,15 @@
"link": false,
"type": "eq"
},
{ "id": "issue5644",
"file": "pdfs/issue5644.pdf",
"md5": "6f9313c5043b3ecb0ab2df321d3e1847",
"rounds": 1,
"link": true,
"firstPage": 1,
"lastPage": 6,
"type": "eq"
},
{ "id": "bug866395",
"file": "pdfs/bug866395.pdf",
"md5": "f03bc77e84637241980b09a0a220f575",