commit 50711d2586293b35b3d82529114cb5641904646c
parent 603f437fffa8b39f825c7b4e68028cbdff919339
Author: Colin Leroy <colin@colino.net>
Date: Wed, 7 Jan 2009 14:39:20 +0000
2009-01-07 [colin] 3.7.0cvs17
* src/html.c
Fix bug 1432, '& not escaped in links (HTML
rendered as text)'
Diffstat:
4 files changed, 30 insertions(+), 1 deletion(-)
diff --git 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
@@ -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
@@ -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
@@ -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;
}