Add non-PRODUCTION/TESTING overflow `assert`s to various string helper-functions (issue 6759)

This commit is contained in:
Jonas Jenwald 2021-06-27 15:19:02 +02:00
Родитель d644b66c72
Коммит 273d8cb746
6 изменённых файлов: 52 добавлений и 4 удалений

Просмотреть файл

@ -3788,6 +3788,9 @@ class PartialEvaluator {
firstChar,
lastChar,
toUnicode,
xHeight: 0,
capHeight: 0,
italicAngle: 0,
isType3Font,
};
const widths = dict.get("Widths");
@ -3919,10 +3922,10 @@ class PartialEvaluator {
bbox: descriptor.getArray("FontBBox") || dict.getArray("FontBBox"),
ascent: descriptor.get("Ascent"),
descent: descriptor.get("Descent"),
xHeight: descriptor.get("XHeight"),
capHeight: descriptor.get("CapHeight"),
xHeight: descriptor.get("XHeight") || 0,
capHeight: descriptor.get("CapHeight") || 0,
flags: descriptor.get("Flags"),
italicAngle: descriptor.get("ItalicAngle"),
italicAngle: descriptor.get("ItalicAngle") || 0,
isType3Font,
cssFontInfo,
scaleFactors: glyphScaleFactors,

Просмотреть файл

@ -257,10 +257,28 @@ function int32(b0, b1, b2, b3) {
}
function string16(value) {
if (
typeof PDFJSDev === "undefined" ||
PDFJSDev.test("!PRODUCTION || TESTING")
) {
assert(
typeof value === "number" && Math.abs(value) < 2 ** 16,
`string16: Unexpected input "${value}".`
);
}
return String.fromCharCode((value >> 8) & 0xff, value & 0xff);
}
function safeString16(value) {
if (
typeof PDFJSDev === "undefined" ||
PDFJSDev.test("!PRODUCTION || TESTING")
) {
assert(
typeof value === "number" && !Number.isNaN(value),
`safeString16: Unexpected input "${value}".`
);
}
// clamp value to the 16-bit int range
if (value > 0x7fff) {
value = 0x7fff;
@ -751,7 +769,7 @@ function createPostTable(properties) {
string32(angle) + // italicAngle
"\x00\x00" + // underlinePosition
"\x00\x00" + // underlineThickness
string32(properties.fixedPitch) + // isFixedPitch
string32(properties.fixedPitch ? 1 : 0) + // isFixedPitch
"\x00\x00\x00\x00" + // minMemType42
"\x00\x00\x00\x00" + // maxMemType42
"\x00\x00\x00\x00" + // minMemType1

Просмотреть файл

@ -588,6 +588,15 @@ function arraysToBytes(arr) {
}
function string32(value) {
if (
typeof PDFJSDev === "undefined" ||
PDFJSDev.test("!PRODUCTION || TESTING")
) {
assert(
typeof value === "number" && Math.abs(value) < 2 ** 32,
`string32: Unexpected input "${value}".`
);
}
return String.fromCharCode(
(value >> 24) & 0xff,
(value >> 16) & 0xff,

Просмотреть файл

@ -23,6 +23,9 @@ describe("font_fpgm", function () {
defaultEncoding: [],
cMap,
toUnicode: new ToUnicodeMap([]),
xHeight: 0,
capHeight: 0,
italicAngle: 0,
});
const output = await ttx(font.data);

Просмотреть файл

@ -23,6 +23,9 @@ describe("font_post", function () {
differences: [],
defaultEncoding: [],
toUnicode: new ToUnicodeMap([]),
xHeight: 0,
capHeight: 0,
italicAngle: 0,
});
const output = await ttx(font.data);
@ -41,6 +44,9 @@ describe("font_post", function () {
defaultEncoding: [],
cMap,
toUnicode: new ToUnicodeMap([]),
xHeight: 0,
capHeight: 0,
italicAngle: 0,
});
const output = await ttx(font.data);

Просмотреть файл

@ -31,6 +31,9 @@ describe("font_post", function () {
defaultEncoding: [],
cMap,
toUnicode: new ToUnicodeMap([]),
xHeight: 0,
capHeight: 0,
italicAngle: 0,
});
const output = await ttx(font.data);
@ -45,6 +48,9 @@ describe("font_post", function () {
differences: [],
defaultEncoding: [],
toUnicode: new ToUnicodeMap([]),
xHeight: 0,
capHeight: 0,
italicAngle: 0,
});
const output = await ttx(font.data);
@ -59,6 +65,9 @@ describe("font_post", function () {
differences: [],
defaultEncoding: [],
toUnicode: new ToUnicodeMap([]),
xHeight: 0,
capHeight: 0,
italicAngle: 0,
});
const output = await ttx(font.data);