Skip to content

Commit e96d1df

Browse files
author
Ray Smith
committed
Fixed leaks in pango font info
1 parent bf77438 commit e96d1df

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

training/pango_font_info.cpp

+16-4
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ bool PangoFontInfo::CoversUTF8Text(const char* utf8_text, int byte_length) const
231231
return false;
232232
}
233233
}
234+
pango_coverage_unref(coverage);
235+
g_object_unref(font);
234236
return true;
235237
}
236238

@@ -293,6 +295,8 @@ int PangoFontInfo::DropUncoveredChars(string* utf8_text) const {
293295
my_strnmove(out, utf8_char, utf8_len);
294296
out += utf8_len;
295297
}
298+
pango_coverage_unref(coverage);
299+
g_object_unref(font);
296300
utf8_text->resize(out - utf8_text->c_str());
297301
return num_dropped_chars;
298302
}
@@ -316,6 +320,7 @@ bool PangoFontInfo::GetSpacingProperties(const string& utf8_char,
316320
reinterpret_cast<PangoFcFont*>(font), *it);
317321
if (!glyph_index) {
318322
// Glyph for given unicode character doesn't exist in font.
323+
g_object_unref(font);
319324
return false;
320325
}
321326
// Find the ink glyph extents for the glyph
@@ -332,6 +337,7 @@ bool PangoFontInfo::GetSpacingProperties(const string& utf8_char,
332337
}
333338
*x_bearing = min_bearing;
334339
*x_advance = total_advance;
340+
g_object_unref(font);
335341
return true;
336342
}
337343

@@ -612,9 +618,11 @@ void FontUtils::GetAllRenderableCharacters(std::vector<bool>* unichar_bitmap) {
612618
void FontUtils::GetAllRenderableCharacters(const string& font_name,
613619
std::vector<bool>* unichar_bitmap) {
614620
PangoFontInfo font_info(font_name);
615-
PangoCoverage* coverage =
616-
pango_font_get_coverage(font_info.ToPangoFont(), nullptr);
621+
PangoFont* font = font_info.ToPangoFont();
622+
PangoCoverage* coverage = pango_font_get_coverage(font, nullptr);
617623
CharCoverageMapToBitmap(coverage, unichar_bitmap);
624+
pango_coverage_unref(coverage);
625+
g_object_unref(font);
618626
}
619627

620628
/* static */
@@ -625,10 +633,12 @@ void FontUtils::GetAllRenderableCharacters(const std::vector<string>& fonts,
625633
tlog(1, "Processing %u fonts\n", static_cast<unsigned>(fonts.size()));
626634
for (unsigned i = 0; i < fonts.size(); ++i) {
627635
PangoFontInfo font_info(fonts[i]);
628-
PangoCoverage* coverage =
629-
pango_font_get_coverage(font_info.ToPangoFont(), nullptr);
636+
PangoFont* font = font_info.ToPangoFont();
637+
PangoCoverage* coverage = pango_font_get_coverage(font, nullptr);
630638
// Mark off characters that any font can render.
631639
pango_coverage_max(all_coverage, coverage);
640+
pango_coverage_unref(coverage);
641+
g_object_unref(font);
632642
}
633643
CharCoverageMapToBitmap(all_coverage, unichar_bitmap);
634644
pango_coverage_unref(all_coverage);
@@ -667,6 +677,8 @@ int FontUtils::FontScore(const std::unordered_map<char32, inT64>& ch_map,
667677
ch_flags->push_back(covered);
668678
}
669679
}
680+
pango_coverage_unref(coverage);
681+
g_object_unref(font);
670682
return ok_chars;
671683
}
672684

0 commit comments

Comments
 (0)