Merge pull request #7300 from Snuffleupagus/bug-1068432

Prevent adding invalid values in `CFFDict_setByKey` (bug 1068432)
This commit is contained in:
Brendan Dahl 2016-05-24 12:12:38 -07:00
commit b86610ffdb
5 changed files with 22 additions and 0 deletions

View File

@ -995,6 +995,11 @@ var CFFDict = (function CFFDictClosure() {
// remove the array wrapping these types of values // remove the array wrapping these types of values
if (type === 'num' || type === 'sid' || type === 'offset') { if (type === 'num' || type === 'sid' || type === 'offset') {
value = value[0]; value = value[0];
// Ignore invalid values (fixes bug 1068432).
if (isNaN(value)) {
warn('Invalid CFFDict value: ' + value + ', for key: ' + key + '.');
return true;
}
} }
this.values[key] = value; this.values[key] = value;
return true; return true;

View File

@ -36,6 +36,7 @@
!bug1020858.pdf !bug1020858.pdf
!bug1050040.pdf !bug1050040.pdf
!bug1200096.pdf !bug1200096.pdf
!bug1068432.pdf
!issue5564_reduced.pdf !issue5564_reduced.pdf
!canvas.pdf !canvas.pdf
!bug1132849.pdf !bug1132849.pdf

BIN
test/pdfs/bug1068432.pdf Normal file

Binary file not shown.

View File

@ -203,6 +203,13 @@
"lastPage": 1, "lastPage": 1,
"type": "eq" "type": "eq"
}, },
{ "id": "bug1068432",
"file": "pdfs/bug1068432.pdf",
"md5": "b76ac8d7d0ef471f28535c881f421e33",
"rounds": 1,
"link": false,
"type": "eq"
},
{ "id": "issue1512", { "id": "issue1512",
"file": "pdfs/issue1512r.pdf", "file": "pdfs/issue1512r.pdf",
"md5": "af48ede2658d99cca423147085c6609b", "md5": "af48ede2658d99cca423147085c6609b",

View File

@ -95,6 +95,15 @@ describe('CFFParser', function() {
expect(topDict.getByName('Private')).toEqual([45, 102]); expect(topDict.getByName('Private')).toEqual([45, 102]);
}); });
it('refuses to add topDict key with invalid value (bug 1068432)',
function () {
var topDict = cff.topDict;
var defaultValue = topDict.getByName('UnderlinePosition');
topDict.setByKey(/* [12, 3] = */ 3075, [NaN]);
expect(topDict.getByName('UnderlinePosition')).toEqual(defaultValue);
});
it('parses a CharString having cntrmask', function() { it('parses a CharString having cntrmask', function() {
var bytes = new Uint8Array([0, 1, // count var bytes = new Uint8Array([0, 1, // count
1, // offsetSize 1, // offsetSize