2009-01-07 [colin] 3.7.0cvs17
authorColin Leroy <colin@colino.net>
Wed, 7 Jan 2009 14:39:20 +0000 (14:39 +0000)
committerColin Leroy <colin@colino.net>
Wed, 7 Jan 2009 14:39:20 +0000 (14:39 +0000)
* src/html.c
Fix bug 1432, '&amp; not escaped in links (HTML
rendered as text)'

ChangeLog
PATCHSETS
configure.ac
src/html.c

index a7d11c9..61edeb5 100644 (file)
--- 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
index 3530da8..1f938be 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( 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
index 5b6a2f7..c3fecba 100644 (file)
@@ -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=
 
index dbea9f6..08b39f3 100644 (file)
@@ -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;
                        }