emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master d81df9e449: Fix copying font names around on Haiku


From: Po Lu
Subject: master d81df9e449: Fix copying font names around on Haiku
Date: Wed, 23 Mar 2022 21:51:33 -0400 (EDT)

branch: master
commit d81df9e44933d5b4d386e29d953055dfc029e742
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Fix copying font names around on Haiku
    
    * 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 | 6 ++++++
 src/haiku_support.cc      | 7 ++++++-
 src/haikufont.c           | 2 ++
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/haiku_font_support.cc b/src/haiku_font_support.cc
index 549c54d864..fd41ee71f0 100644
--- a/src/haiku_font_support.cc
+++ b/src/haiku_font_support.cc
@@ -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
diff --git a/src/haiku_support.cc b/src/haiku_support.cc
index 24009c0ef6..5ad3c7c794 100644
--- a/src/haiku_support.cc
+++ b/src/haiku_support.cc
@@ -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';
+       }
     }
 }
 
diff --git a/src/haikufont.c b/src/haikufont.c
index 5099285f10..b9f6dc2fe8 100644
--- a/src/haikufont.c
+++ b/src/haikufont.c
@@ -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));



reply via email to

[Prev in Thread] Current Thread [Next in Thread]