mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -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);
|
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
|
static gboolean
|
||||||
gnc_report_system_report_stream_cb (const char *location, char ** data, int *len)
|
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)
|
if (!ok)
|
||||||
{
|
{
|
||||||
|
char *sanitized = html_sanitize (captured_str);
|
||||||
*data = g_strdup_printf ("<html><body><h3>%s</h3>"
|
*data = g_strdup_printf ("<html><body><h3>%s</h3>"
|
||||||
"<p>%s</p><pre>%s</pre></body></html>",
|
"<p>%s</p><pre>%s</pre></body></html>",
|
||||||
_("Report error"),
|
_("Report error"),
|
||||||
_("An error occurred while running the report."),
|
_("An error occurred while running the report."),
|
||||||
captured_str);
|
sanitized);
|
||||||
|
|
||||||
|
g_free (sanitized);
|
||||||
g_free(captured_str);
|
g_free(captured_str);
|
||||||
|
|
||||||
/* Make sure the progress bar is finished, which will also
|
/* Make sure the progress bar is finished, which will also
|
||||||
|
Loading…
Reference in New Issue
Block a user