From 4d6dc384ee0f49d8c35e17c116c98647298d9529 Mon Sep 17 00:00:00 2001 From: John Ralls Date: Fri, 29 Apr 2022 15:41:45 -0700 Subject: [PATCH] [import matcher] NULL protect g_utf8_normalize It crashes if fed a NULL string. May fix https://bugs.gnucash.org/show_bug.cgi?id=798483. --- gnucash/import-export/import-backend.c | 34 +++++++++++++++++--------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/gnucash/import-export/import-backend.c b/gnucash/import-export/import-backend.c index a993c32299..60a79077e6 100644 --- a/gnucash/import-export/import-backend.c +++ b/gnucash/import-export/import-backend.c @@ -875,23 +875,33 @@ update_desc_and_notes (const GNCImportTransInfo* trans_info) if (trans_info->append_text) { - gchar* desc_imported = g_utf8_normalize (xaccTransGetDescription ( - imp_trans), -1, G_NORMALIZE_ALL); - gchar* desc_matched = g_utf8_normalize (xaccTransGetDescription ( - selected_match->trans), -1, G_NORMALIZE_ALL); - gchar* note_imported = g_utf8_normalize (xaccTransGetNotes ( - imp_trans), -1, G_NORMALIZE_ALL); - gchar* note_matched = g_utf8_normalize (xaccTransGetNotes ( - selected_match->trans), -1, G_NORMALIZE_ALL); + gchar *desc_imported, *desc_matched, *note_imported, *note_matched; + const gchar* raw_str = xaccTransGetDescription (imp_trans); + + desc_imported = + raw_str ? g_utf8_normalize (raw_str, -1, G_NORMALIZE_ALL) : NULL; + raw_str = xaccTransGetDescription (selected_match->trans); + desc_matched = + raw_str ? g_utf8_normalize (raw_str, -1, G_NORMALIZE_ALL) : NULL; + raw_str = xaccTransGetNotes (imp_trans); + note_imported = + raw_str ? g_utf8_normalize (raw_str, -1, G_NORMALIZE_ALL) : NULL; + raw_str = xaccTransGetNotes (selected_match->trans); + note_matched = + raw_str ? g_utf8_normalize (raw_str, -1, G_NORMALIZE_ALL) : NULL; // Append if desc_imported not already in desc_matched - if (g_utf8_strlen (desc_imported, -1) > g_utf8_strlen (desc_matched, -1) || - !strstr (desc_matched, desc_imported)) + if (desc_imported && + (!desc_matched || + g_utf8_strlen (desc_imported, -1) > g_utf8_strlen (desc_matched, -1) || + !strstr (desc_matched, desc_imported))) desc_append (selected_match->trans, imp_trans); // Append if note_imported not already in note_matched - if (g_utf8_strlen (note_imported, -1) > g_utf8_strlen (note_matched, -1) || - !strstr (note_matched, note_imported)) + if (note_imported && + (!note_matched || + g_utf8_strlen (note_imported, -1) > g_utf8_strlen (note_matched, -1) || + !strstr (note_matched, note_imported))) notes_append (selected_match->trans, imp_trans); g_free(desc_imported);