From 7510ab36b714c70366855e72a481ab6c97d0c9c8 Mon Sep 17 00:00:00 2001 From: Patrick Griffis Date: Sun, 11 Feb 2018 17:24:32 -0500 Subject: [PATCH] xtext: Fix accidental truncation Fixes #2121 --- src/fe-gtk/xtext.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/fe-gtk/xtext.c b/src/fe-gtk/xtext.c index 203bcd60..8ca24a12 100644 --- a/src/fe-gtk/xtext.c +++ b/src/fe-gtk/xtext.c @@ -4729,6 +4729,7 @@ void gtk_xtext_append (xtext_buffer *buf, unsigned char *text, int len, time_t stamp) { textentry *ent; + gboolean truncate = FALSE; if (len == -1) len = strlen (text); @@ -4737,12 +4738,27 @@ gtk_xtext_append (xtext_buffer *buf, unsigned char *text, int len, time_t stamp) len--; if (len >= sizeof (buf->xtext->scratch_buffer)) + { len = sizeof (buf->xtext->scratch_buffer) - 1; + truncate = TRUE; + } ent = g_malloc (len + 1 + sizeof (textentry)); ent->str = (unsigned char *) ent + sizeof (textentry); - safe_strcpy (ent->str, text, len); - ent->str_len = strlen (ent->str); /* Possibly truncated */ + ent->str_len = len; + if (len) + { + if (!truncate) + { + memcpy (ent->str, text, len); + ent->str[len] = '\0'; + } + else + { + safe_strcpy (ent->str, text, sizeof (buf->xtext->scratch_buffer)); + ent->str_len = strlen (ent->str); + } + } ent->indent = 0; ent->left_len = -1;