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:
commit
846eb967cc
@ -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
|
||||
|
1
test/pdfs/issue5644.pdf.link
Normal file
1
test/pdfs/issue5644.pdf.link
Normal file
@ -0,0 +1 @@
|
||||
http://web.archive.org/web/20140703204310/http://repository.readscheme.org/ftp/papers/sw2010/06-barland.pdf
|
@ -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",
|
||||
|
Loading…
x
Reference in New Issue
Block a user