]> git.eshelyaron.com Git - emacs.git/commitdiff
Revert "Remove redundant byte-swapping boundary"
authorPo Lu <luangruo@yahoo.com>
Sat, 3 Aug 2024 09:34:18 +0000 (17:34 +0800)
committerEshel Yaron <me@eshelyaron.com>
Tue, 6 Aug 2024 09:54:47 +0000 (11:54 +0200)
This reverts commit daefd6771a4879bb8e71ea67f69522700155df01.

* src/sfnt.c (sfnt_read_OS_2_table): Restore realignment after
s_family_class, as it occupies byte 32, not 34.  Reported by Pip
Cet <pipcet@protonmail.com>.

(cherry picked from commit 8d073823c61017c581a18853c89ec84432018d60)

src/sfnt.c
src/sfnt.h

index 11670f1dd5c9c0b39443f75ee870da9764725476..34ff6964c31eee9bec15d2517f2aa4bb71903729 100644 (file)
@@ -16606,10 +16606,10 @@ sfnt_read_OS_2_table (int fd, struct sfnt_offset_subtable *subtable)
 
   OS_2 = xmalloc (sizeof *OS_2);
 
-  /* Read data into the structure.  */
+  /* Read data up to the end of `panose'.  */
 
-  wanted = SFNT_ENDOF (struct sfnt_OS_2_table, fs_last_char_index,
-                      uint16_t);
+  wanted = SFNT_ENDOF (struct sfnt_OS_2_table, panose,
+                      unsigned char[10]);
   rc = read (fd, OS_2, wanted);
 
   if (rc == -1 || rc != wanted)
@@ -16636,6 +16636,20 @@ sfnt_read_OS_2_table (int fd, struct sfnt_offset_subtable *subtable)
   sfnt_swap16 (&OS_2->y_strikeout_size);
   sfnt_swap16 (&OS_2->y_strikeout_position);
   sfnt_swap16 (&OS_2->s_family_class);
+
+  /* Read fields between ul_unicode_range and fs_last_char_index.  */
+  wanted = (SFNT_ENDOF (struct sfnt_OS_2_table, fs_last_char_index,
+                       uint16_t)
+           - offsetof (struct sfnt_OS_2_table, ul_unicode_range));
+  rc = read (fd, &OS_2->ul_unicode_range, wanted);
+
+  if (rc == -1 || rc != wanted)
+    {
+      xfree (OS_2);
+      return NULL;
+    }
+
+  /* Swap the remainder and return the table.  */
   sfnt_swap32 (&OS_2->ul_unicode_range[0]);
   sfnt_swap32 (&OS_2->ul_unicode_range[1]);
   sfnt_swap32 (&OS_2->ul_unicode_range[2]);
index ecc3876b39411240a96cf793b784c5e85f756c75..444b1dfe42780096633bfae8b3a66eb5b44d40df 100644 (file)
@@ -1395,6 +1395,8 @@ struct sfnt_OS_2_table
   /* Microsoft ``panose'' classification.  */
   unsigned char panose[10];
 
+  /* Alignment boundary! */
+
   /* Unicode range specification.  */
   uint32_t ul_unicode_range[4];