Unverified Commit 7d5a49d5 authored by Sean Hammond's avatar Sean Hammond Committed by GitHub

Merge pull request #563 from hypothesis/pdf-page-index-bounds-check

Add missing page index bounds check
parents e4fb57cb a2336a7c
...@@ -97,7 +97,8 @@ findPage = (offset) -> ...@@ -97,7 +97,8 @@ findPage = (offset) ->
# 150 | 2 # 150 | 2
# #
count = (textContent) -> count = (textContent) ->
if total + textContent.length > offset lastPageIndex = PDFViewerApplication.pdfViewer.pagesCount - 1
if total + textContent.length > offset or index == lastPageIndex
offset = total offset = total
return Promise.resolve({index, offset, textContent}) return Promise.resolve({index, offset, textContent})
else else
......
...@@ -35,7 +35,7 @@ var fixtures = { ...@@ -35,7 +35,7 @@ var fixtures = {
], ],
}; };
describe('PDF anchoring', function () { describe('annotator.anchoring.pdf', function () {
var container; var container;
var viewer; var viewer;
...@@ -166,39 +166,30 @@ describe('PDF anchoring', function () { ...@@ -166,39 +166,30 @@ describe('PDF anchoring', function () {
}); });
}); });
it('anchors using a quote if the position anchor fails', function () { [{
viewer.setCurrentPage(0); // Position on same page as quote but different text.
var range = findText(container, 'Pride And Prejudice'); offset: 5,
return pdfAnchoring.describe(container, range).then(function (selectors) { },{
var position = selectors[0]; // Position on a different page to the quote.
var quote = selectors[1]; offset: fixtures.pdfPages[0].length + 10,
},{
// Manipulate the position selector so that it is no longer valid. // Position invalid for document.
// Anchoring should fall back to the quote selector instead. offset: 100000,
position.start += 5; }].forEach(({ offset }) => {
position.end += 5; it('anchors using a quote if the position selector fails', function () {
viewer.setCurrentPage(0);
return pdfAnchoring.anchor(container, [position, quote]); var range = findText(container, 'Pride And Prejudice');
}).then(function (range) { return pdfAnchoring.describe(container, range).then(function (selectors) {
assert.equal(range.toString(), 'Pride And Prejudice'); var position = selectors[0];
}); var quote = selectors[1];
});
it('anchors using a quote if the position selector refers to the wrong page', function () {
viewer.setCurrentPage(0);
var range = findText(container, 'Pride And Prejudice');
return pdfAnchoring.describe(container, range).then(function (selectors) {
var position = selectors[0];
var quote = selectors[1];
// Manipulate the position selector so that it refers to a location position.start += offset;
// a long way away, on a different page, than the quote. position.end += offset;
position.start += fixtures.pdfPages[0].length + 10;
position.end += fixtures.pdfPages[0].length + 10;
return pdfAnchoring.anchor(container, [position, quote]); return pdfAnchoring.anchor(container, [position, quote]);
}).then(function (range) { }).then(range => {
assert.equal(range.toString(), 'Pride And Prejudice'); assert.equal(range.toString(), 'Pride And Prejudice');
});
}); });
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment