From d81df9e44933d5b4d386e29d953055dfc029e742 Mon Sep 17 00:00:00 2001 From: Po Lu Date: Thu, 24 Mar 2022 01:50:18 +0000 Subject: [PATCH] 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 549c54d8649..fd41ee71f04 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 24009c0ef6a..5ad3c7c794d 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 5099285f100..b9f6dc2fe8e 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)); -- 2.39.5