From 127c658f05afd4bdddfdd0c04d02aa7fd9264c76 Mon Sep 17 00:00:00 2001 From: John Ralls Date: Wed, 19 Dec 2018 22:35:18 -0800 Subject: [PATCH] un_escape: More terse, more correct. Doesn't run past the end of the input string even if the last character is a quote. --- .../bi-import/dialog-bi-import.c | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/gnucash/import-export/bi-import/dialog-bi-import.c b/gnucash/import-export/bi-import/dialog-bi-import.c index 6aabcc384e..894eeec475 100644 --- a/gnucash/import-export/bi-import/dialog-bi-import.c +++ b/gnucash/import-export/bi-import/dialog-bi-import.c @@ -877,25 +877,21 @@ gnc_bi_import_create_bis (GtkListStore * store, QofBook * book, * @return char* Modified string. */ static char* +static char* un_escape(char *str) { gchar quote = '"'; gchar *newStr = NULL, *tmpstr = str; - int n = 0; + int n = strlen (str), i; + newStr = g_malloc (n + 1); + memset (newStr, 0, n + 1); - newStr = g_malloc(strlen(str)+1); // This must be freed in the calling code. - while(*tmpstr != '\0') + for (i = 0; *tmpstr != '\0'; ++i, ++tmpstr) { - if(*tmpstr == quote) - // We always want the character after a quote. - newStr[n] = *(++tmpstr); - else - newStr[n] = *tmpstr; - ++tmpstr; - ++n; + newStr[i] = *tmpstr == quote ? *(++tmpstr) : *(tmpstr); + if (*tmpstr == '\0') + break; } - g_free (str); - newStr[n] = '\0'; //ending the character array return newStr; }