Mercurial > pidgin
changeset 2724:7f3f4aa114ad
[gaim-migrate @ 2737]
this seems... i don't know.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Thu, 15 Nov 2001 22:34:47 +0000 |
parents | ca32b587589f |
children | f3c094e78609 |
files | src/protocols/yahoo/yahoo.c |
diffstat | 1 files changed, 17 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/protocols/yahoo/yahoo.c Thu Nov 15 22:26:13 2001 +0000 +++ b/src/protocols/yahoo/yahoo.c Thu Nov 15 22:34:47 2001 +0000 @@ -213,11 +213,11 @@ int pos = 0; while (pos + 1 < len) { - char key[64], *value; + char key[64], *value = NULL; + int accept; int x; struct yahoo_pair *pair = g_new0(struct yahoo_pair, 1); - pkt->hash = g_slist_append(pkt->hash, pair); x = 0; while (pos + 1 < len) { @@ -228,19 +228,28 @@ key[x] = 0; pos += 2; pair->key = strtol(key, NULL, 10); + accept = x; /* if x is 0 there was no key, so don't accept it */ - value = g_malloc(len - pos + 1); + if (accept) + value = g_malloc(len - pos + 1); x = 0; while (pos + 1 < len) { if (data[pos] == 0xc0 && data[pos + 1] == 0x80) break; - value[x++] = data[pos++]; + if (accept) + value[x++] = data[pos++]; } - value[x] = 0; + if (accept) + value[x] = 0; pos += 2; - pair->value = g_strdup(value); - g_free(value); - debug_printf("Key: %d \tValue: %s\n", pair->key, pair->value); + if (accept) { + pair->value = g_strdup(value); + g_free(value); + pkt->hash = g_slist_append(pkt->hash, pair); + debug_printf("Key: %d \tValue: %s\n", pair->key, pair->value); + } else { + g_free(pair); + } } }