From 18f08c47618d7ab646f895947d5472ec005a0ecb Mon Sep 17 00:00:00 2001 From: Khaled Hosny Date: Fri, 31 Dec 2021 23:48:54 +0200 Subject: [PATCH] [cff] Reject negative vsindex The spec declares vsindex as signed number, but signed index is meaningless (and we already treat vsindex unsigned almost everywhere). Fix the only place we treat it as unsigned and reject negative value. --- src/cff.cc | 9 +++++---- src/cff_charstring.cc | 7 ++++--- ...05a7abc8e4c954ef105d056bd6249c6fda96d4a8.otf | Bin 0 -> 29198 bytes tests/meson.build | 1 + 4 files changed, 10 insertions(+), 7 deletions(-) create mode 100644 tests/fonts/fuzzing/05a7abc8e4c954ef105d056bd6249c6fda96d4a8.otf diff --git a/src/cff.cc b/src/cff.cc index 1f5bc9ed..408f3eab 100644 --- a/src/cff.cc +++ b/src/cff.cc @@ -404,7 +404,7 @@ bool ParsePrivateDictData( std::vector operands; bool cff2 = (out_cff->major == 2); bool blend_seen = false; - uint32_t vsindex = 0; + int32_t vsindex = 0; // Since a Private DICT for FDArray might not have a Local Subr (e.g. Hiragino // Kaku Gothic Std W8), we create an empty Local Subr here to match the size @@ -413,7 +413,7 @@ bool ParsePrivateDictData( if (type == DICT_DATA_FDARRAY) { out_cff->local_subrs_per_font.push_back(new ots::CFFIndex); if (cff2) { - out_cff->vsindex_per_font.push_back(0); + out_cff->vsindex_per_font.push_back(vsindex); } } @@ -531,7 +531,8 @@ bool ParsePrivateDictData( return OTS_FAILURE(); } vsindex = operands.back().first; - if (vsindex >= out_cff->region_index_count.size()) { + if (vsindex < 0 || + vsindex >= (int32_t)out_cff->region_index_count.size()) { return OTS_FAILURE(); } out_cff->vsindex_per_font.back() = vsindex; @@ -545,7 +546,7 @@ bool ParsePrivateDictData( if (operands.size() < 1) { return OTS_FAILURE(); } - if (vsindex >= out_cff->region_index_count.size()) { + if (vsindex >= (int32_t)out_cff->region_index_count.size()) { return OTS_FAILURE(); } uint16_t k = out_cff->region_index_count.at(vsindex); diff --git a/src/cff_charstring.cc b/src/cff_charstring.cc index bb8acff1..ac7b6311 100644 --- a/src/cff_charstring.cc +++ b/src/cff_charstring.cc @@ -361,7 +361,8 @@ bool ExecuteCharStringOperator(ots::OpenTypeCFF& cff, if (cs_ctx.blend_seen || cs_ctx.vsindex_seen) { return OTS_FAILURE(); } - if (argument_stack->top() >= (int32_t)cff.region_index_count.size()) { + if (argument_stack->top() < 0 || + argument_stack->top() >= (int32_t)cff.region_index_count.size()) { return OTS_FAILURE(); } cs_ctx.vsindex_seen = true; @@ -992,8 +993,8 @@ bool ValidateCFFCharStrings( if (fd_index >= (int32_t)cff.vsindex_per_font.size()) { // shouldn't get this far with a font in this condition, but just in case return OTS_FAILURE(); // fd_index out-of-range - } - cs_ctx.vsindex = cff.vsindex_per_font.at(fd_index); + } + cs_ctx.vsindex = cff.vsindex_per_font.at(fd_index); } #ifdef DUMP_T2CHARSTRING diff --git a/tests/fonts/fuzzing/05a7abc8e4c954ef105d056bd6249c6fda96d4a8.otf b/tests/fonts/fuzzing/05a7abc8e4c954ef105d056bd6249c6fda96d4a8.otf new file mode 100644 index 0000000000000000000000000000000000000000..8d25b96b09d75759162b7741f5c52d17a7a8cee3 GIT binary patch literal 29198 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 IxY+Rj0BU7f$^ZZW literal 0 HcmV?d00001 diff --git a/tests/meson.build b/tests/meson.build index 0ab6889f..30b53b31 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -203,6 +203,7 @@ fuzzing_fonts = good_fonts + bad_fonts + [ 'fonts/fuzzing/011facefb10ee4f813117eae60bb5940a280ae30.woff2', 'fonts/fuzzing/0509e80afb379d16560e9e47bdd7d888bebdebc6.ttf', 'fonts/fuzzing/051d92f8bc6ff724511b296c27623f824de256e9.ttf', + 'fonts/fuzzing/05a7abc8e4c954ef105d056bd6249c6fda96d4a8.otf', 'fonts/fuzzing/07f054357ff8638bac3711b422a1e31180bba863.ttf', 'fonts/fuzzing/10531f9105aa03bf6e0f9754ec8af33ed457ad5c.otf', 'fonts/fuzzing/11340844a1190f140c78a0a964d49b5985253ea0.woff2',