From e068366277356b7bf9acd58ddb121fca15306cca Mon Sep 17 00:00:00 2001 From: Geert Janssens Date: Mon, 1 Oct 2018 13:18:25 +0200 Subject: [PATCH] Bug 796772 - Receivable Ageing Report invalid URL for Totals column Use some pointer arithmetic to split the owner guid into a separate string before handing it over to boost::uuid for interpretation --- gnucash/gnome/business-urls.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/gnucash/gnome/business-urls.c b/gnucash/gnome/business-urls.c index 280cafc81d..3070b73c3c 100644 --- a/gnucash/gnome/business-urls.c +++ b/gnucash/gnome/business-urls.c @@ -175,7 +175,7 @@ static gboolean ownerreportCB (const char *location, const char *label, gboolean new_window, GNCURLResult * result) { - const char *ownerptr; + char *ownerptr; const char *acctptr; GncGUID guid; GncOwner owner; @@ -190,10 +190,6 @@ ownerreportCB (const char *location, const char *label, /* href="...:owner=:guid=[&acct=]" */ - acctptr = strchr (location, '&'); - if (acctptr) - acctptr++; - if (strncmp ("owner=", location, 6) != 0) { result->error_message = g_strdup_printf (_("Badly formed URL %s"), @@ -201,9 +197,17 @@ ownerreportCB (const char *location, const char *label, return FALSE; } + acctptr = strchr (location, '&'); + if (acctptr) + { + ownerptr = g_strndup (location + 6, acctptr - location - 6); + acctptr++; + } + else + ownerptr = g_strdup (location + 6); + memset (&owner, 0, sizeof (owner)); - ownerptr = location + 6; switch (*ownerptr) { case 'c': @@ -220,15 +224,18 @@ ownerreportCB (const char *location, const char *label, break; default: result->error_message = g_strdup_printf (_("Bad URL: %s"), location); + g_free (ownerptr); return FALSE; } if (!string_to_guid (ownerptr + 2, &guid)) { result->error_message = g_strdup_printf (_("Bad URL: %s"), location); + g_free (ownerptr); return FALSE; } + g_free (ownerptr); switch (type) {