diff -up pidgin-2.10.7/libpurple/protocols/mxit/markup.c.CVE-2013-6489 pidgin-2.10.7/libpurple/protocols/mxit/markup.c --- pidgin-2.10.7/libpurple/protocols/mxit/markup.c.CVE-2013-6489 2013-02-11 04:16:52.000000000 -0500 +++ pidgin-2.10.7/libpurple/protocols/mxit/markup.c 2014-01-29 20:55:34.239345911 -0500 @@ -204,7 +204,8 @@ static unsigned int asn_getlength( const */ static int asn_getUtf8( const char* data, char type, char** utf8 ) { - int len; + unsigned int len; + gchar *out_str; /* validate the field type [1 byte] */ if ( data[0] != type ) { @@ -213,10 +214,17 @@ static int asn_getUtf8( const char* data return -1; } - len = data[1]; /* length field [1 bytes] */ - *utf8 = g_malloc( len + 1 ); - memcpy( *utf8, &data[2], len ); /* data field */ - (*utf8)[len] = '\0'; + len = (uint8_t)data[1]; /* length field [1 byte] */ + out_str = g_malloc(len + 1); + if (out_str == NULL) { + purple_debug_fatal(MXIT_PLUGIN_ID, "asn_getUtf8: out of memory"); + return -1; + } + + memcpy(out_str, &data[2], len); /* data field */ + out_str[len] = '\0'; + + *utf8 = out_str; return ( len + 2 ); }