diff options
Diffstat (limited to 'common/pango.c')
-rw-r--r-- | common/pango.c | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/common/pango.c b/common/pango.c index 18b92e9d..db8413f7 100644 --- a/common/pango.c +++ b/common/pango.c | |||
@@ -10,8 +10,9 @@ | |||
10 | #include "log.h" | 10 | #include "log.h" |
11 | #include "stringop.h" | 11 | #include "stringop.h" |
12 | 12 | ||
13 | #define MAX_CHARS 16384 | ||
14 | |||
13 | static const char overflow[] = "[buffer overflow]"; | 15 | static const char overflow[] = "[buffer overflow]"; |
14 | static const int max_chars = 16384; | ||
15 | 16 | ||
16 | size_t escape_markup_text(const char *src, char *dest) { | 17 | size_t escape_markup_text(const char *src, char *dest) { |
17 | size_t length = 0; | 18 | size_t length = 0; |
@@ -87,11 +88,11 @@ PangoLayout *get_pango_layout(cairo_t *cairo, const char *font, | |||
87 | 88 | ||
88 | void get_text_size(cairo_t *cairo, const char *font, int *width, int *height, | 89 | void get_text_size(cairo_t *cairo, const char *font, int *width, int *height, |
89 | int *baseline, double scale, bool markup, const char *fmt, ...) { | 90 | int *baseline, double scale, bool markup, const char *fmt, ...) { |
90 | char *buf = malloc(sizeof(char) * max_chars); | 91 | char buf[MAX_CHARS]; |
91 | 92 | ||
92 | va_list args; | 93 | va_list args; |
93 | va_start(args, fmt); | 94 | va_start(args, fmt); |
94 | if (vsnprintf(buf, sizeof(char) * max_chars, fmt, args) >= max_chars) { | 95 | if (vsnprintf(buf, sizeof(buf), fmt, args) >= MAX_CHARS) { |
95 | strcpy(&buf[sizeof(buf) - sizeof(overflow)], overflow); | 96 | strcpy(&buf[sizeof(buf) - sizeof(overflow)], overflow); |
96 | } | 97 | } |
97 | va_end(args); | 98 | va_end(args); |
@@ -103,17 +104,15 @@ void get_text_size(cairo_t *cairo, const char *font, int *width, int *height, | |||
103 | *baseline = pango_layout_get_baseline(layout) / PANGO_SCALE; | 104 | *baseline = pango_layout_get_baseline(layout) / PANGO_SCALE; |
104 | } | 105 | } |
105 | g_object_unref(layout); | 106 | g_object_unref(layout); |
106 | |||
107 | free(buf); | ||
108 | } | 107 | } |
109 | 108 | ||
110 | void pango_printf(cairo_t *cairo, const char *font, | 109 | void pango_printf(cairo_t *cairo, const char *font, |
111 | double scale, bool markup, const char *fmt, ...) { | 110 | double scale, bool markup, const char *fmt, ...) { |
112 | char *buf = malloc(sizeof(char) * max_chars); | 111 | char buf[MAX_CHARS]; |
113 | 112 | ||
114 | va_list args; | 113 | va_list args; |
115 | va_start(args, fmt); | 114 | va_start(args, fmt); |
116 | if (vsnprintf(buf, sizeof(char) * max_chars, fmt, args) >= max_chars) { | 115 | if (vsnprintf(buf, sizeof(buf), fmt, args) >= MAX_CHARS) { |
117 | strcpy(&buf[sizeof(buf) - sizeof(overflow)], overflow); | 116 | strcpy(&buf[sizeof(buf) - sizeof(overflow)], overflow); |
118 | } | 117 | } |
119 | va_end(args); | 118 | va_end(args); |
@@ -126,6 +125,4 @@ void pango_printf(cairo_t *cairo, const char *font, | |||
126 | pango_cairo_update_layout(cairo, layout); | 125 | pango_cairo_update_layout(cairo, layout); |
127 | pango_cairo_show_layout(cairo, layout); | 126 | pango_cairo_show_layout(cairo, layout); |
128 | g_object_unref(layout); | 127 | g_object_unref(layout); |
129 | |||
130 | free(buf); | ||
131 | } | 128 | } |