summaryrefslogtreecommitdiff
path: root/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff-common.hh
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff-common.hh')
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff-common.hh27
1 files changed, 23 insertions, 4 deletions
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff-common.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff-common.hh
index 3400892830c..422b20b8d07 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff-common.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-cff-common.hh
@@ -110,7 +110,11 @@ struct str_encoder_t
void copy_str (const byte_str_t &str)
{
unsigned int offset = buff.length;
- buff.resize (offset + str.length);
+ if (unlikely (!buff.resize (offset + str.length)))
+ {
+ set_error ();
+ return;
+ }
if (unlikely (buff.length < offset + str.length))
{
set_error ();
@@ -412,7 +416,8 @@ struct parsed_cs_str_vec_t : hb_vector_t<parsed_cs_str_t>
void init (unsigned int len_ = 0)
{
SUPER::init ();
- resize (len_);
+ if (unlikely (!resize (len_)))
+ return;
for (unsigned int i = 0; i < length; i++)
(*this)[i].init ();
}
@@ -528,11 +533,16 @@ struct subr_remaps_t
void init (unsigned int fdCount)
{
- local_remaps.resize (fdCount);
+ if (unlikely (!local_remaps.resize (fdCount))) return;
for (unsigned int i = 0; i < fdCount; i++)
local_remaps[i].init ();
}
+ bool in_error()
+ {
+ return local_remaps.in_error ();
+ }
+
void create (subr_closures_t& closures)
{
global_remap.create (closures.global_closure);
@@ -591,10 +601,19 @@ struct subr_subsetter_t
parsed_charstrings.init (plan->num_output_glyphs ());
parsed_global_subrs.init (acc.globalSubrs->count);
- parsed_local_subrs.resize (acc.fdCount);
+
+ if (unlikely (remaps.in_error()
+ || parsed_charstrings.in_error ()
+ || parsed_global_subrs.in_error ())) {
+ return false;
+ }
+
+ if (unlikely (!parsed_local_subrs.resize (acc.fdCount))) return false;
+
for (unsigned int i = 0; i < acc.fdCount; i++)
{
parsed_local_subrs[i].init (acc.privateDicts[i].localSubrs->count);
+ if (unlikely (parsed_local_subrs[i].in_error ())) return false;
}
if (unlikely (!closures.valid))
return false;