mirror of
https://github.com/Gnucash/gnucash.git
synced 2024-11-25 10:20:18 -06:00
[gnc-plugin-report-system] sanitize error html before adding to page
The error backtrace usually contains < > characters. eg #<report> or #<procedure> etc. This commit will sanitize them to HTML entities so that they may be rendered properly in webkit.
This commit is contained in:
parent
b7e966d828
commit
5aaedbf7a4
@ -137,6 +137,24 @@ gnc_report_system_file_stream_cb (const char *location, char ** data, int *len)
|
||||
return (*len > 0);
|
||||
}
|
||||
|
||||
static char *
|
||||
html_sanitize (const char *str)
|
||||
{
|
||||
GString *gs = g_string_sized_new (strlen (str));
|
||||
for (const char *c = str; *c; c++)
|
||||
{
|
||||
if (*c == '&')
|
||||
gs = g_string_append (gs, "&");
|
||||
else if (*c == '<')
|
||||
gs = g_string_append (gs, "<");
|
||||
else if (*c == '>')
|
||||
gs = g_string_append (gs, ">");
|
||||
else
|
||||
gs = g_string_append_c (gs, *c);
|
||||
}
|
||||
return g_string_free (gs, FALSE);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gnc_report_system_report_stream_cb (const char *location, char ** data, int *len)
|
||||
{
|
||||
@ -147,12 +165,14 @@ gnc_report_system_report_stream_cb (const char *location, char ** data, int *len
|
||||
|
||||
if (!ok)
|
||||
{
|
||||
char *sanitized = html_sanitize (captured_str);
|
||||
*data = g_strdup_printf ("<html><body><h3>%s</h3>"
|
||||
"<p>%s</p><pre>%s</pre></body></html>",
|
||||
_("Report error"),
|
||||
_("An error occurred while running the report."),
|
||||
captured_str);
|
||||
sanitized);
|
||||
|
||||
g_free (sanitized);
|
||||
g_free(captured_str);
|
||||
|
||||
/* Make sure the progress bar is finished, which will also
|
||||
|
Loading…
Reference in New Issue
Block a user