talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

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, '&amp; not escaped in links (HTML
		rendered as text)'

Diffstat:
MChangeLog | 6++++++
MPATCHSETS | 1+
Mconfigure.ac | 2+-
Msrc/html.c | 22++++++++++++++++++++++
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, '&amp; 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; }