From 267c41f2e006622d485afd93db4bf5cbe56f139d Mon Sep 17 00:00:00 2001 From: Christian Stimming Date: Tue, 15 Aug 2006 20:05:43 +0000 Subject: [PATCH] Double-check really every string from aqbanking for valid utf-8 characters. BP git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@14680 57a11ea4-9604-0410-9ed3-97b8803252fd --- ChangeLog | 4 ++++ src/import-export/hbci/dialog-hbcitrans.c | 16 +++++++++++++--- src/import-export/hbci/druid-hbci-initial.c | 15 ++++++++++----- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2d193daabc..e9ccbed287 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2006-08-15 Christian Stimming + * src/import-export/hbci/dialog-hbcitrans.c, druid-hbci-initial.c: + Double-check really every string from aqbanking for valid utf-8 + characters. + * src/core-utils/gnc-glib-utils.[hc]: Add gnc_utf8_strip_invalid_strdup() that returns a stripped copy instead of working in-place. diff --git a/src/import-export/hbci/dialog-hbcitrans.c b/src/import-export/hbci/dialog-hbcitrans.c index b37e84d142..bb141ac0c2 100644 --- a/src/import-export/hbci/dialog-hbcitrans.c +++ b/src/import-export/hbci/dialog-hbcitrans.c @@ -45,6 +45,7 @@ #include "gtk-compat.h" #include "dialog-utils.h" +#include "gnc-glib-utils.h" #include "gnc-ui.h" #include "gnc-amount-edit.h" #include "dialog-transfer.h" @@ -246,7 +247,7 @@ gnc_hbci_dialog_new (GtkWidget *parent, GList *templates) { GladeXML *xml; - const char *hbci_bankid, *hbci_bankname; + const char *hbci_bankid; HBCITransDialog *td; GtkTreeSelection *selection; GtkTreeViewColumn *column; @@ -258,7 +259,6 @@ gnc_hbci_dialog_new (GtkWidget *parent, td->trans_type = trans_type; g_assert (h_acc); hbci_bankid = AB_Account_GetBankCode(h_acc); - hbci_bankname = AB_Account_GetBankName(h_acc); #if HAVE_KTOBLZCHECK_H td->blzcheck = AccountNumberCheck_new(); #endif @@ -272,6 +272,7 @@ gnc_hbci_dialog_new (GtkWidget *parent, GTK_WINDOW (parent)); { + gchar *hbci_bankname, *hbci_ownername; GtkWidget *heading_label; GtkWidget *recp_name_heading; GtkWidget *recp_account_heading; @@ -394,9 +395,16 @@ gnc_hbci_dialog_new (GtkWidget *parent, /* Make this button insensitive since it's still unimplemented. */ gtk_widget_destroy (exec_later_button); + /* aqbanking up to 2.3.0 did not guarantee the following strings + to be correct utf8; mentioned in bug#351371. */ + hbci_bankname = + gnc_utf8_strip_invalid_strdup (AB_Account_GetBankName(h_acc)); + hbci_ownername = + gnc_utf8_strip_invalid_strdup (AB_Account_GetOwnerName(h_acc)); + /* Fill in the values from the objects */ gtk_label_set_text (GTK_LABEL (orig_name_label), - AB_Account_GetOwnerName (h_acc)); + hbci_ownername); gtk_label_set_text (GTK_LABEL (orig_account_label), AB_Account_GetAccountNumber (h_acc)); gtk_label_set_text (GTK_LABEL (orig_bankname_label), @@ -405,6 +413,8 @@ gnc_hbci_dialog_new (GtkWidget *parent, _("(unknown)"))); gtk_label_set_text (GTK_LABEL (orig_bankcode_label), hbci_bankid); + g_free (hbci_ownername); + g_free (hbci_bankname); /* fill list for choosing a transaction template */ gtk_tree_view_set_headers_visible(td->template_gtktreeview, FALSE); diff --git a/src/import-export/hbci/druid-hbci-initial.c b/src/import-export/hbci/druid-hbci-initial.c index 9e8e2fd7ad..34bc5d62ec 100644 --- a/src/import-export/hbci/druid-hbci-initial.c +++ b/src/import-export/hbci/druid-hbci-initial.c @@ -37,6 +37,7 @@ #include "import-account-matcher.h" #include "gnc-hbci-utils.h" +#include "gnc-glib-utils.h" #include "dialog-utils.h" #include "druid-utils.h" #include "gnc-ui-util.h" @@ -117,21 +118,25 @@ delete_initial_druid (HBCIInitialInfo *info) static gchar *gnc_hbci_account_longname(const AB_ACCOUNT *hacc) { - const char *bankname; + gchar *bankname; + gchar *result; const char *bankcode; g_assert(hacc); - bankname = AB_Account_GetBankName (hacc); + bankname = + gnc_utf8_strip_invalid_strdup (AB_Account_GetBankName (hacc)); bankcode = AB_Account_GetBankCode (hacc); /* Translators: Strings are 1. Account code, 2. Bank name, 3. Bank code. */ - if (bankname) - return g_strdup_printf(_("%s at %s (code %s)"), + if (strlen(bankname) > 0) + result = g_strdup_printf(_("%s at %s (code %s)"), AB_Account_GetAccountNumber (hacc), bankname, bankcode); else - return g_strdup_printf(_("%s at bank code %s"), + result = g_strdup_printf(_("%s at bank code %s"), AB_Account_GetAccountNumber (hacc), bankcode); + g_free (bankname); + return result; }