58 lines
1.3 KiB
Diff
58 lines
1.3 KiB
Diff
commit a5897feadc4be73b0ffd8458556c47117bd24d03
|
|
Author: Ethan A Merritt <merritt@u.washington.edu>
|
|
Date: Tue Mar 25 22:51:54 2025 -0700
|
|
|
|
hpgl: font name parsing overruns the string by one char
|
|
|
|
if no comma is present in the font name.
|
|
E.g.
|
|
set term pcl
|
|
set title "Title" font "sans" # no comma in font name
|
|
plot x
|
|
|
|
Bug 2781
|
|
|
|
diff --git term/hpgl.trm term/hpgl.trm
|
|
index 8e763d174..d432f7e39 100644
|
|
--- term/hpgl.trm
|
|
+++ term/hpgl.trm
|
|
@@ -1653,28 +1653,22 @@ TERM_PUBLIC int
|
|
HPGL2_set_font(const char *font)
|
|
{
|
|
char name[MAX_ID_LEN + 1];
|
|
- int sep;
|
|
- int int_size;
|
|
- double size;
|
|
+ char *sep;
|
|
+ double size = HPGL2_point_size;
|
|
|
|
if (font == NULL)
|
|
font = "";
|
|
|
|
- sep = strcspn(font, ",");
|
|
strncpy(name, font, sizeof(name)-1);
|
|
|
|
- if (sep < sizeof(name))
|
|
- name[sep] = NUL;
|
|
-
|
|
-/* determine font size, use default from options if invalid */
|
|
- int_size = 0;
|
|
- /* FIXME: use strtod instead */
|
|
- sscanf(&(font[sep + 1]), "%d", &int_size);
|
|
- if (int_size > 0)
|
|
- size = int_size;
|
|
- else
|
|
- size = HPGL2_point_size;
|
|
-
|
|
+ /* determine font size, use default from options if invalid */
|
|
+ sep = strchr(font, ',');
|
|
+ if (sep) {
|
|
+ double req_size = strtod(sep+1, NULL);
|
|
+ if (req_size > 0)
|
|
+ size = req_size;
|
|
+ *sep = '\0';
|
|
+ }
|
|
return HPGL2_set_font_size(name, size);
|
|
}
|
|
|