libpurple/protocols/oscar/oscar.c

branch
soc.2010.icq-tlc
changeset 30681
cb3f1a4239c7
parent 30679
8e1fb05214d2
child 30682
9b61802df6a2
equal deleted inserted replaced
30680:40ef96dcbea2 30681:cb3f1a4239c7
1983 } 1983 }
1984 } break; 1984 } break;
1985 1985
1986 case 0x1a: { /* Handle SMS or someone has sent you a greeting card or requested buddies? */ 1986 case 0x1a: { /* Handle SMS or someone has sent you a greeting card or requested buddies? */
1987 ByteStream qbs; 1987 ByteStream qbs;
1988 int smstype, taglen, smslen; 1988 guint16 smstype;
1989 guint32 taglen, smslen;
1989 char *tagstr = NULL, *smsmsg = NULL; 1990 char *tagstr = NULL, *smsmsg = NULL;
1990 xmlnode *xmlroot = NULL, *xmltmp = NULL; 1991 xmlnode *xmlroot = NULL, *xmltmp = NULL;
1991 gchar *uin = NULL, *message = NULL; 1992 gchar *uin = NULL, *message = NULL;
1992 1993
1993 /* From libicq2000-0.3.2/src/ICQ.cpp */ 1994 /* From libicq2000-0.3.2/src/ICQ.cpp */
1997 /* unexpected: 00 00 26 00 81 1a 18 bc 0e 6c 18 47 a5 91 6f 18 dc c7 6f 1a | 00 00 | 0d 00 00 00 | 49 43 51 57 65 62 4d 65 73 73 61 67 65 ... */ 1998 /* unexpected: 00 00 26 00 81 1a 18 bc 0e 6c 18 47 a5 91 6f 18 dc c7 6f 1a | 00 00 | 0d 00 00 00 | 49 43 51 57 65 62 4d 65 73 73 61 67 65 ... */
1998 smstype = byte_stream_getle16(&qbs); 1999 smstype = byte_stream_getle16(&qbs);
1999 if (smstype != 0) 2000 if (smstype != 0)
2000 break; 2001 break;
2001 taglen = byte_stream_getle32(&qbs); 2002 taglen = byte_stream_getle32(&qbs);
2003 if (taglen > 2000) {
2004 /* Avoid trying to allocate large amounts of memory, in
2005 case we get something unexpected. */
2006 break;
2007 }
2002 tagstr = byte_stream_getstr(&qbs, taglen); 2008 tagstr = byte_stream_getstr(&qbs, taglen);
2003 if (tagstr == NULL) 2009 if (tagstr == NULL)
2004 break; 2010 break;
2005 byte_stream_advance(&qbs, 3); 2011 byte_stream_advance(&qbs, 3);
2006 byte_stream_advance(&qbs, 4); 2012 byte_stream_advance(&qbs, 4);
2007 smslen = byte_stream_getle32(&qbs); 2013 smslen = byte_stream_getle32(&qbs);
2014 if (smslen > 2000) {
2015 /* Avoid trying to allocate large amounts of memory, in
2016 case we get something unexpected. */
2017 g_free(tagstr);
2018 break;
2019 }
2008 smsmsg = byte_stream_getstr(&qbs, smslen); 2020 smsmsg = byte_stream_getstr(&qbs, smslen);
2009 2021
2010 /* Check if this is an SMS being sent from server */ 2022 /* Check if this is an SMS being sent from server */
2011 if ((smstype == 0) && (!strcmp(tagstr, "ICQSMS")) && (smsmsg != NULL)) 2023 if ((smstype == 0) && (!strcmp(tagstr, "ICQSMS")) && (smsmsg != NULL))
2012 { 2024 {

mercurial