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
This commit is contained in:
Geert Janssens 2018-10-01 13:18:25 +02:00
parent 65c8357f53
commit e068366277

View File

@ -175,7 +175,7 @@ static gboolean
ownerreportCB (const char *location, const char *label, ownerreportCB (const char *location, const char *label,
gboolean new_window, GNCURLResult * result) gboolean new_window, GNCURLResult * result)
{ {
const char *ownerptr; char *ownerptr;
const char *acctptr; const char *acctptr;
GncGUID guid; GncGUID guid;
GncOwner owner; GncOwner owner;
@ -190,10 +190,6 @@ ownerreportCB (const char *location, const char *label,
/* href="...:owner=<owner-type>:guid=<guid>[&acct=<guid>]" */ /* href="...:owner=<owner-type>:guid=<guid>[&acct=<guid>]" */
acctptr = strchr (location, '&');
if (acctptr)
acctptr++;
if (strncmp ("owner=", location, 6) != 0) if (strncmp ("owner=", location, 6) != 0)
{ {
result->error_message = g_strdup_printf (_("Badly formed URL %s"), result->error_message = g_strdup_printf (_("Badly formed URL %s"),
@ -201,9 +197,17 @@ ownerreportCB (const char *location, const char *label,
return FALSE; 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)); memset (&owner, 0, sizeof (owner));
ownerptr = location + 6;
switch (*ownerptr) switch (*ownerptr)
{ {
case 'c': case 'c':
@ -220,15 +224,18 @@ ownerreportCB (const char *location, const char *label,
break; break;
default: default:
result->error_message = g_strdup_printf (_("Bad URL: %s"), location); result->error_message = g_strdup_printf (_("Bad URL: %s"), location);
g_free (ownerptr);
return FALSE; return FALSE;
} }
if (!string_to_guid (ownerptr + 2, &guid)) if (!string_to_guid (ownerptr + 2, &guid))
{ {
result->error_message = g_strdup_printf (_("Bad URL: %s"), location); result->error_message = g_strdup_printf (_("Bad URL: %s"), location);
g_free (ownerptr);
return FALSE; return FALSE;
} }
g_free (ownerptr);
switch (type) switch (type)
{ {