Mercurial > pidgin.yaz
changeset 29751:55515a760e87
propagate from branch 'im.pidgin.pidgin' (head 0085c32abf29d034d30feef1ffb1d483e316a9a8)
to branch 'im.pidgin.pidgin.next.minor' (head 2bbe60cf7bc2495f5e36d078796c57690c1e402b)
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Wed, 10 Feb 2010 03:43:55 +0000 |
parents | e1c01f236674 (diff) 2b9db39bd7ed (current diff) |
children | 93afc09a5e18 |
files | ChangeLog ChangeLog.API pidgin/gtkcelllayout.c pidgin/gtkcelllayout.h pidgin/gtkcellrendererprogress.c pidgin/gtkcellrendererprogress.h pidgin/gtkcellview.c pidgin/gtkcellview.h pidgin/gtkcellviewmenuitem.c pidgin/gtkcellviewmenuitem.h pidgin/gtkexpander.c pidgin/gtkexpander.h pidgin/pidgincombobox.c pidgin/pidgincombobox.h pidgin/pixmaps/tray/16/tray-away.png pidgin/pixmaps/tray/16/tray-busy.png pidgin/pixmaps/tray/16/tray-connecting.png pidgin/pixmaps/tray/16/tray-extended-away.png pidgin/pixmaps/tray/16/tray-invisible.png pidgin/pixmaps/tray/16/tray-message.png pidgin/pixmaps/tray/16/tray-new-im.png pidgin/pixmaps/tray/16/tray-offline.png pidgin/pixmaps/tray/16/tray-online.png pidgin/pixmaps/tray/22/tray-away.png pidgin/pixmaps/tray/22/tray-busy.png pidgin/pixmaps/tray/22/tray-connecting.png pidgin/pixmaps/tray/22/tray-extended-away.png pidgin/pixmaps/tray/22/tray-invisible.png pidgin/pixmaps/tray/22/tray-message.png pidgin/pixmaps/tray/22/tray-new-im.png pidgin/pixmaps/tray/22/tray-offline.png pidgin/pixmaps/tray/22/tray-online.png pidgin/pixmaps/tray/32/tray-away.png pidgin/pixmaps/tray/32/tray-busy.png pidgin/pixmaps/tray/32/tray-connecting.png pidgin/pixmaps/tray/32/tray-extended-away.png pidgin/pixmaps/tray/32/tray-invisible.png pidgin/pixmaps/tray/32/tray-message.png pidgin/pixmaps/tray/32/tray-new-im.png pidgin/pixmaps/tray/32/tray-offline.png pidgin/pixmaps/tray/32/tray-online.png pidgin/pixmaps/tray/48/tray-away.png pidgin/pixmaps/tray/48/tray-busy.png pidgin/pixmaps/tray/48/tray-connecting.png pidgin/pixmaps/tray/48/tray-extended-away.png pidgin/pixmaps/tray/48/tray-invisible.png pidgin/pixmaps/tray/48/tray-message.png pidgin/pixmaps/tray/48/tray-new-im.png pidgin/pixmaps/tray/48/tray-offline.png pidgin/pixmaps/tray/48/tray-online.png |
diffstat | 5 files changed, 86 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Tue Feb 09 22:40:36 2010 +0000 +++ b/ChangeLog Wed Feb 10 03:43:55 2010 +0000 @@ -28,6 +28,8 @@ * When looking up DNS records, use the type of record returned by the server (instead of the type we asked for) to determine how to process the record. + * Fix an issue with parsing XML attributes that contain "<br>". + See ChangeLog.API for more details. General: * Correctly disable all missing dependencies when using the
--- a/ChangeLog.API Tue Feb 09 22:40:36 2010 +0000 +++ b/ChangeLog.API Wed Feb 10 03:43:55 2010 +0000 @@ -34,6 +34,12 @@ purple_xfer_request_denied if an error is found when selecting a file to send. Request denied is still used when a receive request is not allowed. + * xmlnode_from_str now properly handles paring an attribute which + contain "<br>", which were previously transformed into a + newline character (libxml2 unescapes all entities except + representations of '&', and libpurple's purple_unescape_html + converts "<br>" to a newline). + Perl: Changed: * Corrected the package names for the PurpleProxyType and
--- a/libpurple/protocols/bonjour/parser.c Tue Feb 09 22:40:36 2010 +0000 +++ b/libpurple/protocols/bonjour/parser.c Wed Feb 10 03:43:55 2010 +0000 @@ -49,6 +49,31 @@ return FALSE; } +static char *purple_unescape_text(const char *in) +{ + GString *ret; + const char *c = in; + + if (in == NULL) + return NULL; + + ret = g_string_new(""); + while (*c) { + int len; + const char *ent; + + if ((ent = purple_markup_unescape_entity(c, &len)) != NULL) { + g_string_append(ret, ent); + c += len; + } else { + g_string_append_c(ret, *c); + c++; + } + } + + return g_string_free(ret, FALSE); +} + static void bonjour_parser_element_start_libxml(void *user_data, const xmlChar *element_name, const xmlChar *prefix, const xmlChar *namespace, @@ -102,7 +127,7 @@ attrib[attrib_len] = '\0'; txt = attrib; - attrib = purple_unescape_html(txt); + attrib = purple_unescape_text(txt); g_free(txt); xmlnode_set_attrib_full(node, name, attrib_ns, prefix, attrib); g_free(attrib);
--- a/libpurple/protocols/jabber/parser.c Tue Feb 09 22:40:36 2010 +0000 +++ b/libpurple/protocols/jabber/parser.c Wed Feb 10 03:43:55 2010 +0000 @@ -31,6 +31,31 @@ #include "util.h" #include "xmlnode.h" +static char *purple_unescape_text(const char *in) +{ + GString *ret; + const char *c = in; + + if (in == NULL) + return NULL; + + ret = g_string_new(""); + while (*c) { + int len; + const char *ent; + + if ((ent = purple_markup_unescape_entity(c, &len)) != NULL) { + g_string_append(ret, ent); + c += len; + } else { + g_string_append_c(ret, *c); + c++; + } + } + + return g_string_free(ret, FALSE); +} + static void jabber_parser_element_start_libxml(void *user_data, const xmlChar *element_name, const xmlChar *prefix, const xmlChar *namespace, @@ -89,7 +114,7 @@ char *attrib = g_strndup((gchar *)attributes[i+3], attrib_len); txt = attrib; - attrib = purple_unescape_html(txt); + attrib = purple_unescape_text(txt); g_free(txt); xmlnode_set_attrib_full(node, name, attrib_ns, prefix, attrib); g_free(attrib);
--- a/libpurple/xmlnode.c Tue Feb 09 22:40:36 2010 +0000 +++ b/libpurple/xmlnode.c Wed Feb 10 03:43:55 2010 +0000 @@ -545,6 +545,31 @@ return xml_with_declaration; } +static char *purple_unescape_text(const char *in) +{ + GString *ret; + const char *c = in; + + if (in == NULL) + return NULL; + + ret = g_string_new(""); + while (*c) { + int len; + const char *ent; + + if ((ent = purple_markup_unescape_entity(c, &len)) != NULL) { + g_string_append(ret, ent); + c += len; + } else { + g_string_append_c(ret, *c); + c++; + } + } + + return g_string_free(ret, FALSE); +} + struct _xmlnode_parser_data { xmlnode *current; gboolean error; @@ -590,7 +615,7 @@ int attrib_len = attributes[i+4] - attributes[i+3]; char *attrib = g_strndup((const char *)attributes[i+3], attrib_len); txt = attrib; - attrib = purple_unescape_html(txt); + attrib = purple_unescape_text(txt); g_free(txt); xmlnode_set_attrib_full(node, name, NULL, prefix, attrib); g_free(attrib);