[subset] Fix memory leak in hb-ot-{maxp,os2}. Plus some formatting.
This commit is contained in:
parent
66e282df32
commit
3ab7d2649b
|
@ -64,7 +64,7 @@ struct maxp
|
||||||
inline bool subset (hb_subset_plan_t *plan) const
|
inline bool subset (hb_subset_plan_t *plan) const
|
||||||
{
|
{
|
||||||
hb_blob_t *maxp_blob = OT::Sanitizer<OT::maxp>().sanitize (hb_face_reference_table (plan->source, HB_OT_TAG_maxp));
|
hb_blob_t *maxp_blob = OT::Sanitizer<OT::maxp>().sanitize (hb_face_reference_table (plan->source, HB_OT_TAG_maxp));
|
||||||
// TODO hb_blob_copy_writable_or_fail
|
// TODO(grieger): hb_blob_copy_writable_or_fail
|
||||||
hb_blob_t *maxp_prime_blob = hb_blob_create_sub_blob (maxp_blob, 0, -1);
|
hb_blob_t *maxp_prime_blob = hb_blob_create_sub_blob (maxp_blob, 0, -1);
|
||||||
hb_blob_destroy (maxp_blob);
|
hb_blob_destroy (maxp_blob);
|
||||||
|
|
||||||
|
@ -76,7 +76,9 @@ struct maxp
|
||||||
|
|
||||||
maxp_prime->set_num_glyphs (plan->gids_to_retain_sorted.len);
|
maxp_prime->set_num_glyphs (plan->gids_to_retain_sorted.len);
|
||||||
|
|
||||||
return hb_subset_plan_add_table(plan, HB_OT_TAG_maxp, maxp_prime_blob);
|
bool result = hb_subset_plan_add_table(plan, HB_OT_TAG_maxp, maxp_prime_blob);
|
||||||
|
hb_blob_destroy (maxp_prime_blob);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We only implement version 0.5 as none of the extra fields in version 1.0 are useful. */
|
/* We only implement version 0.5 as none of the extra fields in version 1.0 are useful. */
|
||||||
|
|
|
@ -53,6 +53,7 @@ struct os2
|
||||||
{
|
{
|
||||||
hb_blob_t *os2_blob = OT::Sanitizer<OT::os2>().sanitize (hb_face_reference_table (plan->source, HB_OT_TAG_os2));
|
hb_blob_t *os2_blob = OT::Sanitizer<OT::os2>().sanitize (hb_face_reference_table (plan->source, HB_OT_TAG_os2));
|
||||||
hb_blob_t *os2_prime_blob = hb_blob_create_sub_blob (os2_blob, 0, -1);
|
hb_blob_t *os2_prime_blob = hb_blob_create_sub_blob (os2_blob, 0, -1);
|
||||||
|
// TODO(grieger): move to hb_blob_copy_writable_or_fail
|
||||||
hb_blob_destroy (os2_blob);
|
hb_blob_destroy (os2_blob);
|
||||||
|
|
||||||
OT::os2 *os2_prime = (OT::os2 *) hb_blob_get_data_writable (os2_prime_blob, nullptr);
|
OT::os2 *os2_prime = (OT::os2 *) hb_blob_get_data_writable (os2_prime_blob, nullptr);
|
||||||
|
@ -62,27 +63,28 @@ struct os2
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t min_cp, max_cp;
|
uint16_t min_cp, max_cp;
|
||||||
find_min_and_max_codepoint (plan, &min_cp, &max_cp);
|
find_min_and_max_codepoint (plan->codepoints, &min_cp, &max_cp);
|
||||||
os2_prime->usFirstCharIndex.set (min_cp);
|
os2_prime->usFirstCharIndex.set (min_cp);
|
||||||
os2_prime->usLastCharIndex.set (max_cp);
|
os2_prime->usLastCharIndex.set (max_cp);
|
||||||
|
|
||||||
return hb_subset_plan_add_table(plan, HB_OT_TAG_os2, os2_prime_blob);
|
bool result = hb_subset_plan_add_table(plan, HB_OT_TAG_os2, os2_prime_blob);
|
||||||
|
hb_blob_destroy (os2_prime_blob);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void find_min_and_max_codepoint (hb_subset_plan_t *plan,
|
static inline void find_min_and_max_codepoint (const hb_prealloced_array_t<hb_codepoint_t> &codepoints,
|
||||||
uint16_t *min_cp, /* OUT */
|
uint16_t *min_cp, /* OUT */
|
||||||
uint16_t *max_cp /* OUT */)
|
uint16_t *max_cp /* OUT */)
|
||||||
{
|
{
|
||||||
hb_codepoint_t min = -1, max = 0;
|
hb_codepoint_t min = -1, max = 0;
|
||||||
|
|
||||||
for (int i = 0; i < plan->codepoints.len; i++) {
|
for (int i = 0; i < codepoints.len; i++)
|
||||||
hb_codepoint_t cp = plan->codepoints[i];
|
{
|
||||||
if (cp < min) {
|
hb_codepoint_t cp = codepoints[i];
|
||||||
|
if (cp < min)
|
||||||
min = cp;
|
min = cp;
|
||||||
}
|
if (cp > max)
|
||||||
if (cp > max) {
|
|
||||||
max = cp;
|
max = cp;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (min > 0xFFFF)
|
if (min > 0xFFFF)
|
||||||
|
|
Loading…
Reference in New Issue