@@ -73,6 +73,7 @@ import { getGlyphsUnicode } from "./glyphlist.js";
73
73
import { getMetrics } from "./metrics.js" ;
74
74
import { getUnicodeForGlyph } from "./unicode.js" ;
75
75
import { ImageResizer } from "./image_resizer.js" ;
76
+ import { isNumberArray } from "./core_utils.js" ;
76
77
import { MurmurHash3_64 } from "../shared/murmurhash3.js" ;
77
78
import { OperatorList } from "./operator_list.js" ;
78
79
import { PDFImage } from "./image.js" ;
@@ -4077,8 +4078,14 @@ class PartialEvaluator {
4077
4078
composite = true ;
4078
4079
}
4079
4080
4080
- const firstChar = dict . get ( "FirstChar" ) || 0 ,
4081
- lastChar = dict . get ( "LastChar" ) || ( composite ? 0xffff : 0xff ) ;
4081
+ let firstChar = dict . get ( "FirstChar" ) ;
4082
+ if ( ! Number . isInteger ( firstChar ) ) {
4083
+ firstChar = 0 ;
4084
+ }
4085
+ let lastChar = dict . get ( "LastChar" ) ;
4086
+ if ( ! Number . isInteger ( lastChar ) ) {
4087
+ lastChar = composite ? 0xffff : 0xff ;
4088
+ }
4082
4089
const descriptor = dict . get ( "FontDescriptor" ) ;
4083
4090
const toUnicode = dict . get ( "ToUnicode" ) || baseDict . get ( "ToUnicode" ) ;
4084
4091
@@ -4206,11 +4213,15 @@ class PartialEvaluator {
4206
4213
4207
4214
if ( ! descriptor ) {
4208
4215
if ( isType3Font ) {
4216
+ let bbox = dict . getArray ( "FontBBox" ) ;
4217
+ if ( ! isNumberArray ( bbox , 4 ) ) {
4218
+ bbox = [ 0 , 0 , 0 , 0 ] ;
4219
+ }
4209
4220
// FontDescriptor is only required for Type3 fonts when the document
4210
4221
// is a tagged pdf. Create a barbebones one to get by.
4211
4222
descriptor = new Dict ( null ) ;
4212
4223
descriptor . set ( "FontName" , Name . get ( type ) ) ;
4213
- descriptor . set ( "FontBBox" , dict . getArray ( "FontBBox" ) || [ 0 , 0 , 0 , 0 ] ) ;
4224
+ descriptor . set ( "FontBBox" , bbox ) ;
4214
4225
} else {
4215
4226
// Before PDF 1.5 if the font was one of the base 14 fonts, having a
4216
4227
// FontDescriptor was not required.
@@ -4392,13 +4403,37 @@ class PartialEvaluator {
4392
4403
}
4393
4404
4394
4405
let fontMatrix = dict . getArray ( "FontMatrix" ) ;
4395
- if (
4396
- ! Array . isArray ( fontMatrix ) ||
4397
- fontMatrix . length !== 6 ||
4398
- fontMatrix . some ( x => typeof x !== "number" )
4399
- ) {
4406
+ if ( ! isNumberArray ( fontMatrix , 6 ) ) {
4400
4407
fontMatrix = FONT_IDENTITY_MATRIX ;
4401
4408
}
4409
+ let bbox = descriptor . getArray ( "FontBBox" ) || dict . getArray ( "FontBBox" ) ;
4410
+ if ( ! isNumberArray ( bbox , 4 ) ) {
4411
+ bbox = undefined ;
4412
+ }
4413
+ let ascent = descriptor . get ( "Ascent" ) ;
4414
+ if ( typeof ascent !== "number" ) {
4415
+ ascent = undefined ;
4416
+ }
4417
+ let descent = descriptor . get ( "Descent" ) ;
4418
+ if ( typeof descent !== "number" ) {
4419
+ descent = undefined ;
4420
+ }
4421
+ let xHeight = descriptor . get ( "XHeight" ) ;
4422
+ if ( typeof xHeight !== "number" ) {
4423
+ xHeight = 0 ;
4424
+ }
4425
+ let capHeight = descriptor . get ( "CapHeight" ) ;
4426
+ if ( typeof capHeight !== "number" ) {
4427
+ capHeight = 0 ;
4428
+ }
4429
+ let flags = descriptor . get ( "Flags" ) ;
4430
+ if ( ! Number . isInteger ( flags ) ) {
4431
+ flags = 0 ;
4432
+ }
4433
+ let italicAngle = descriptor . get ( "ItalicAngle" ) ;
4434
+ if ( typeof italicAngle !== "number" ) {
4435
+ italicAngle = 0 ;
4436
+ }
4402
4437
4403
4438
const properties = {
4404
4439
type,
@@ -4416,13 +4451,13 @@ class PartialEvaluator {
4416
4451
firstChar,
4417
4452
lastChar,
4418
4453
toUnicode,
4419
- bbox : descriptor . getArray ( "FontBBox" ) || dict . getArray ( "FontBBox" ) ,
4420
- ascent : descriptor . get ( "Ascent" ) ,
4421
- descent : descriptor . get ( "Descent" ) ,
4422
- xHeight : descriptor . get ( "XHeight" ) || 0 ,
4423
- capHeight : descriptor . get ( "CapHeight" ) || 0 ,
4424
- flags : descriptor . get ( "Flags" ) ,
4425
- italicAngle : descriptor . get ( "ItalicAngle" ) || 0 ,
4454
+ bbox,
4455
+ ascent,
4456
+ descent,
4457
+ xHeight,
4458
+ capHeight,
4459
+ flags,
4460
+ italicAngle,
4426
4461
isType3Font,
4427
4462
cssFontInfo,
4428
4463
scaleFactors : glyphScaleFactors ,
0 commit comments