src/hb-subset-glyf.cc |   30 +++++++++++-------------------
 1 file changed, 11 insertions(+), 19 deletions(-)

New commits:
commit fd0bde6325a7dfe3ba54b683646ca0693c414446
Author: Behdad Esfahbod <beh...@behdad.org>
Date:   Tue Feb 13 16:35:30 2018 -0800

    [subset] Fix loca offsets
    
    Was writing source font's offsets. Ouch.

diff --git a/src/hb-subset-glyf.cc b/src/hb-subset-glyf.cc
index 0a06313e..6dc8199b 100644
--- a/src/hb-subset-glyf.cc
+++ b/src/hb-subset-glyf.cc
@@ -38,14 +38,12 @@ _calculate_glyf_and_loca_prime_size (const 
OT::glyf::accelerator_t &glyf,
 {
   unsigned int total = 0;
   unsigned int count = 0;
-  for (unsigned int i = 0; i < glyph_ids.len; i++) {
+  for (unsigned int i = 0; i < glyph_ids.len; i++)
+  {
     hb_codepoint_t next_glyph = glyph_ids[i];
     unsigned int start_offset, end_offset;
-    if (unlikely (!glyf.get_offsets (next_glyph, &start_offset, &end_offset))) 
{
-      *glyf_size = 0;
-      *loca_size = sizeof(OT::HBUINT32);
-      return false;
-    }
+    if (unlikely (!glyf.get_offsets (next_glyph, &start_offset, &end_offset)))
+      end_offset = start_offset = 0;
 
     total += end_offset - start_offset;
     count++;
@@ -84,27 +82,21 @@ _write_glyf_and_loca_prime (const OT::glyf::accelerator_t 
&glyf,
 {
   char *glyf_prime_data_next = glyf_prime_data;
 
-  hb_codepoint_t new_glyph_id = 0;
-
-  unsigned int end_offset = 0;
-  for (unsigned int i = 0; i < glyph_ids.len; i++) {
-    unsigned int start_offset;
-    if (unlikely (!glyf.get_offsets (glyph_ids[i], &start_offset, 
&end_offset))) {
-      return false;
-    }
+  for (unsigned int i = 0; i < glyph_ids.len; i++)
+  {
+    unsigned int start_offset, end_offset;
+    if (unlikely (!glyf.get_offsets (glyph_ids[i], &start_offset, 
&end_offset)))
+      end_offset = start_offset = 0;
 
     int length = end_offset - start_offset;
     memcpy (glyf_prime_data_next, glyf_data + start_offset, length);
 
-    _write_loca_entry (i, start_offset, use_short_loca, loca_prime_data);
+    _write_loca_entry (i, glyf_prime_data_next - glyf_prime_data, 
use_short_loca, loca_prime_data);
 
     glyf_prime_data_next += length;
-    new_glyph_id++;
   }
 
-  // Add the last loca entry which doesn't correspond to a specific glyph
-  // but identifies the end of the last glyphs data.
-  _write_loca_entry (new_glyph_id, end_offset, use_short_loca, 
loca_prime_data);
+  _write_loca_entry (glyph_ids.len, glyf_prime_data_next - glyf_prime_data, 
use_short_loca, loca_prime_data);
 
   return true;
 }
_______________________________________________
HarfBuzz mailing list
HarfBuzz@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/harfbuzz

Reply via email to