]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix copying font names around on Haiku
authorPo Lu <luangruo@yahoo.com>
Thu, 24 Mar 2022 01:50:18 +0000 (01:50 +0000)
committerPo Lu <luangruo@yahoo.com>
Thu, 24 Mar 2022 01:50:18 +0000 (01:50 +0000)
* src/haiku_font_support.cc (font_style_to_flags)
(haiku_font_fill_pattern, BFont_open_pattern)
(BFont_populate_fixed_family, BFont_populate_plain_family):
* src/haiku_support.cc (be_get_version_string):
* src/haikufont.c (haikufont_spec_or_entity_to_pattern): Stop
assuming patterns were allocated by xzalloc.

src/haiku_font_support.cc
src/haiku_support.cc
src/haikufont.c

index 549c54d86494cf5c7016912cc84f4f2e927506ea..fd41ee71f04d27c8b36eae4130826c18e298babf 100644 (file)
@@ -289,6 +289,7 @@ font_style_to_flags (char *st, struct haiku_font_pattern *pattern)
       pattern->specified |= FSPEC_STYLE;
       std::strncpy ((char *) &pattern->style, st,
                    sizeof pattern->style - 1);
+      pattern->style[sizeof pattern->style - 1] = '\0';
     }
 
   free (style);
@@ -411,6 +412,7 @@ haiku_font_fill_pattern (struct haiku_font_pattern *pattern,
   pattern->specified |= FSPEC_FAMILY;
   std::strncpy (pattern->family, family,
                sizeof pattern->family - 1);
+  pattern->family[sizeof pattern->family - 1] = '\0';
   pattern->specified |= FSPEC_SPACING;
   pattern->mono_spacing_p = flags & B_IS_FIXED;
 }
@@ -534,6 +536,8 @@ BFont_open_pattern (struct haiku_font_pattern *pat, void **font, float size)
   if (!(pat->specified & FSPEC_FAMILY))
     return 1;
   strncpy (name, pat->family, sizeof name - 1);
+  name[sizeof name - 1] = '\0';
+
   sty_count = count_font_styles (name);
 
   if (!sty_count &&
@@ -603,6 +607,7 @@ BFont_populate_fixed_family (struct haiku_font_pattern *ptn)
 
   ptn->specified |= FSPEC_FAMILY;
   strncpy (ptn->family, f, sizeof ptn->family - 1);
+  ptn->family[sizeof ptn->family - 1] = '\0';
 }
 
 void
@@ -614,6 +619,7 @@ BFont_populate_plain_family (struct haiku_font_pattern *ptn)
 
   ptn->specified |= FSPEC_FAMILY;
   strncpy (ptn->family, f, sizeof ptn->family - 1);
+  ptn->family[sizeof ptn->family - 1] = '\0';
 }
 
 int
index 24009c0ef6ac092bbd6d9f5569725eef90b7d7ed..5ad3c7c794daf65cbf9f9ebf3911190c64257861 100644 (file)
@@ -3395,6 +3395,8 @@ void
 be_get_version_string (char *version, int len)
 {
   std::strncpy (version, "Unknown Haiku release", len - 1);
+  version[len - 1] = '\0';
+
   BPath path;
   if (find_directory (B_BEOS_LIB_DIRECTORY, &path) == B_OK)
     {
@@ -3408,7 +3410,10 @@ be_get_version_string (char *version, int len)
           && appFileInfo.GetVersionInfo (&versionInfo,
                                          B_APP_VERSION_KIND) == B_OK
           && versionInfo.short_info[0] != '\0')
-       std::strncpy (version, versionInfo.short_info, len - 1);
+       {
+         std::strncpy (version, versionInfo.short_info, len - 1);
+         version[len - 1] = '\0';
+       }
     }
 }
 
index 5099285f1003a662a70ec70cd369b728563a2dee..b9f6dc2fe8ee951d4ddf32820a1ec9a76414ea3f 100644 (file)
@@ -437,6 +437,7 @@ haikufont_spec_or_entity_to_pattern (Lisp_Object ent,
       strncpy ((char *) &ptn->style,
               SSDATA (SYMBOL_NAME (tem)),
               sizeof ptn->style - 1);
+      ptn->style[sizeof ptn->style - 1] = '\0';
     }
 
   tem = FONT_SLANT_SYMBOLIC (ent);
@@ -475,6 +476,7 @@ haikufont_spec_or_entity_to_pattern (Lisp_Object ent,
       strncpy ((char *) &ptn->family,
               SSDATA (SYMBOL_NAME (tem)),
               sizeof ptn->family - 1);
+      ptn->family[sizeof ptn->family - 1] = '\0';
     }
 
   tem = assq_no_quit (QCscript, AREF (ent, FONT_EXTRA_INDEX));