mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-12 18:27:32 +09:00
Issue #1288 - Part 4: Update the OpenType Sanitizer component to 8.0.0
This commit is contained in:
parent
66b4db7c31
commit
207b043e1c
102 changed files with 10962 additions and 3291 deletions
103
gfx/ots/src/cff_charstring.h
Normal file
103
gfx/ots/src/cff_charstring.h
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
// Copyright (c) 2010-2017 The OTS Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef OTS_CFF_TYPE2_CHARSTRING_H_
|
||||
#define OTS_CFF_TYPE2_CHARSTRING_H_
|
||||
|
||||
#include "cff.h"
|
||||
#include "ots.h"
|
||||
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
namespace ots {
|
||||
|
||||
const size_t kMaxCFF1ArgumentStack = 48;
|
||||
const size_t kMaxCFF2ArgumentStack = 513;
|
||||
|
||||
// Validates all charstrings in |char_strings_index|. Charstring is a small
|
||||
// language for font hinting defined in Adobe Technical Note #5177.
|
||||
// http://www.adobe.com/devnet/font/pdfs/5177.Type2.pdf
|
||||
//
|
||||
// The validation will fail if one of the following conditions is met:
|
||||
// 1. The code uses more than 48 values of argument stack.
|
||||
// 2. The code uses deeply nested subroutine calls (more than 10 levels.)
|
||||
// 3. The code passes invalid number of operands to an operator.
|
||||
// 4. The code calls an undefined global or local subroutine.
|
||||
// 5. The code uses one of the following operators that are unlikely used in
|
||||
// an ordinary fonts, and could be dangerous: random, put, get, index, roll.
|
||||
//
|
||||
// Arguments:
|
||||
// global_subrs_index: Global subroutines which could be called by a charstring
|
||||
// in |char_strings_index|.
|
||||
// fd_select: A map from glyph # to font #.
|
||||
// local_subrs_per_font: A list of Local Subrs associated with FDArrays. Can be
|
||||
// empty.
|
||||
// local_subrs: A Local Subrs associated with Top DICT. Can be NULL.
|
||||
// cff_table: A buffer which contains actual byte code of charstring, global
|
||||
// subroutines and local subroutines.
|
||||
bool ValidateCFFCharStrings(
|
||||
OpenTypeCFF& cff,
|
||||
const CFFIndex &global_subrs_index,
|
||||
Buffer *cff_table);
|
||||
|
||||
// The list of Operators. See Appendix. A in Adobe Technical Note #5177.
|
||||
// and https://docs.microsoft.com/en-us/typography/opentype/spec/cff2charstr
|
||||
enum CharStringOperator {
|
||||
kHStem = 1,
|
||||
kVStem = 3,
|
||||
kVMoveTo = 4,
|
||||
kRLineTo = 5,
|
||||
kHLineTo = 6,
|
||||
kVLineTo = 7,
|
||||
kRRCurveTo = 8,
|
||||
kCallSubr = 10,
|
||||
kReturn = 11,
|
||||
kEndChar = 14,
|
||||
kVSIndex = 15,
|
||||
kBlend = 16,
|
||||
kHStemHm = 18,
|
||||
kHintMask = 19,
|
||||
kCntrMask = 20,
|
||||
kRMoveTo = 21,
|
||||
kHMoveTo = 22,
|
||||
kVStemHm = 23,
|
||||
kRCurveLine = 24,
|
||||
kRLineCurve = 25,
|
||||
kVVCurveTo = 26,
|
||||
kHHCurveTo = 27,
|
||||
kCallGSubr = 29,
|
||||
kVHCurveTo = 30,
|
||||
kHVCurveTo = 31,
|
||||
kDotSection = 12 << 8,
|
||||
kAnd = (12 << 8) + 3,
|
||||
kOr = (12 << 8) + 4,
|
||||
kNot = (12 << 8) + 5,
|
||||
kAbs = (12 << 8) + 9,
|
||||
kAdd = (12 << 8) + 10,
|
||||
kSub = (12 << 8) + 11,
|
||||
kDiv = (12 << 8) + 12,
|
||||
kNeg = (12 << 8) + 14,
|
||||
kEq = (12 << 8) + 15,
|
||||
kDrop = (12 << 8) + 18,
|
||||
kPut = (12 << 8) + 20,
|
||||
kGet = (12 << 8) + 21,
|
||||
kIfElse = (12 << 8) + 22,
|
||||
kRandom = (12 << 8) + 23,
|
||||
kMul = (12 << 8) + 24,
|
||||
kSqrt = (12 << 8) + 26,
|
||||
kDup = (12 << 8) + 27,
|
||||
kExch = (12 << 8) + 28,
|
||||
kIndex = (12 << 8) + 29,
|
||||
kRoll = (12 << 8) + 30,
|
||||
kHFlex = (12 << 8) + 34,
|
||||
kFlex = (12 << 8) + 35,
|
||||
kHFlex1 = (12 << 8) + 36,
|
||||
kFlex1 = (12 << 8) + 37,
|
||||
// Operators that are undocumented, such as 'blend', will be rejected.
|
||||
};
|
||||
|
||||
} // namespace ots
|
||||
|
||||
#endif // OTS_CFF_TYPE2_CHARSTRING_H_
|
||||
Loading…
Add table
Add a link
Reference in a new issue