Merge pull request #8144 from timvandermeij/issue-8143

Widget annotations: do not crash if `Parent` is not a dictionary during field name construction (issue 8143)
This commit is contained in:
Tim van der Meij 2017-03-10 00:40:13 +01:00 committed by GitHub
commit fc5810c97a
2 changed files with 28 additions and 0 deletions

View File

@ -671,6 +671,12 @@ var WidgetAnnotation = (function WidgetAnnotationClosure() {
var loopDict = dict;
while (loopDict.has('Parent')) {
loopDict = loopDict.get('Parent');
if (!isDict(loopDict)) {
// Even though it is not allowed according to the PDF specification,
// bad PDF generators may provide a `Parent` entry that is not a
// dictionary, but `null` for example (issue 8143).
break;
}
if (loopDict.has('T')) {
fieldName.unshift(stringToPDFString(loopDict.get('T')));

View File

@ -805,6 +805,28 @@ describe('annotation', function() {
expect(data.fieldName).toEqual('foo.bar.baz');
});
it('should construct the field name if a parent is not a dictionary ' +
'(issue 8143)', function() {
var parentDict = new Dict();
parentDict.set('Parent', null);
parentDict.set('T', 'foo');
widgetDict.set('Parent', parentDict);
widgetDict.set('T', 'bar');
var widgetRef = new Ref(22, 0);
var xref = new XRefMock([
{ ref: widgetRef, data: widgetDict, }
]);
var annotation = annotationFactory.create(xref, widgetRef,
pdfManagerMock, idFactoryMock);
var data = annotation.data;
expect(data.annotationType).toEqual(AnnotationType.WIDGET);
expect(data.fieldName).toEqual('foo.bar');
});
});
describe('TextWidgetAnnotation', function() {