From 50711d2586293b35b3d82529114cb5641904646c Mon Sep 17 00:00:00 2001 From: Colin Leroy Date: Wed, 7 Jan 2009 14:39:20 +0000 Subject: [PATCH] 2009-01-07 [colin] 3.7.0cvs17 * src/html.c Fix bug 1432, '& not escaped in links (HTML rendered as text)' --- ChangeLog | 6 ++++++ PATCHSETS | 1 + configure.ac | 2 +- src/html.c | 22 ++++++++++++++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index a7d11c9ef..61edeb5b5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-01-07 [colin] 3.7.0cvs17 + + * src/html.c + Fix bug 1432, '& not escaped in links (HTML + rendered as text)' + 2009-01-06 [colin] 3.7.0cvs16 * src/plugins/pgpcore/select-keys.c diff --git a/PATCHSETS b/PATCHSETS index 3530da879..1f938beaf 100644 --- a/PATCHSETS +++ b/PATCHSETS @@ -3678,3 +3678,4 @@ ( cvs diff -u -r 1.36.2.159 -r 1.36.2.160 src/common/utils.c; ) > 3.7.0cvs14.patchset ( cvs diff -u -r 1.274.2.292 -r 1.274.2.293 src/mainwindow.c; cvs diff -u -r 1.83.2.150 -r 1.83.2.151 src/mimeview.c; cvs diff -u -r 1.96.2.213 -r 1.96.2.214 src/textview.c; cvs diff -u -r 1.1.2.22 -r 1.1.2.23 src/plugins/pgpcore/select-keys.c; ) > 3.7.0cvs15.patchset ( cvs diff -u -r 1.1.2.23 -r 1.1.2.24 src/plugins/pgpcore/select-keys.c; ) > 3.7.0cvs16.patchset +( cvs diff -u -r 1.12.2.25 -r 1.12.2.26 src/html.c; ) > 3.7.0cvs17.patchset diff --git a/configure.ac b/configure.ac index 5b6a2f7e1..c3fecba73 100644 --- a/configure.ac +++ b/configure.ac @@ -11,7 +11,7 @@ MINOR_VERSION=7 MICRO_VERSION=0 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=16 +EXTRA_VERSION=17 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/html.c b/src/html.c index dbea9f642..08b39f306 100644 --- a/src/html.c +++ b/src/html.c @@ -441,6 +441,9 @@ static SC_HTMLState sc_html_read_line(SC_HTMLParser *parser) gchar buf2[SC_HTMLBUFSIZE]; gint index; + if (parser->fp == NULL) + return SC_HTML_EOF; + if (fgets(buf, sizeof(buf), parser->fp) == NULL) { parser->state = SC_HTML_EOF; return SC_HTML_EOF; @@ -607,6 +610,24 @@ static void sc_html_free_tag(SC_HTMLTag *tag) g_free(tag); } +static void decode_href(SC_HTMLParser *parser) +{ + gchar *tmp; + SC_HTMLParser *tparser = g_new0(SC_HTMLParser, 1); + + tparser->str = g_string_new(NULL); + tparser->buf = g_string_new(parser->href); + tparser->bufp = tparser->buf->str; + tparser->symbol_table = default_symbol_table; + + tmp = sc_html_parse(tparser); + + g_free(parser->href); + parser->href = g_strdup(tmp); + + sc_html_parser_destroy(tparser); +} + static SC_HTMLState sc_html_parse_tag(SC_HTMLParser *parser) { gchar buf[SC_HTMLBUFSIZE]; @@ -629,6 +650,7 @@ static SC_HTMLState sc_html_parse_tag(SC_HTMLParser *parser) if (cur->data && !strcmp(((SC_HTMLAttr *)cur->data)->name, "href")) { g_free(parser->href); parser->href = g_strdup(((SC_HTMLAttr *)cur->data)->value); + decode_href(parser); parser->state = SC_HTML_HREF_BEG; break; } -- 2.25.1