diff options
author | marcus <marcus@FreeBSD.org> | 2002-11-23 23:56:10 +0000 |
---|---|---|
committer | marcus <marcus@FreeBSD.org> | 2002-11-23 23:56:10 +0000 |
commit | 1835e5aaa6e522026ceb33e3353896a65ebba5c2 (patch) | |
tree | de2f028478b3965fd281c13a647f7d9004fa8441 /net-im/gaim | |
parent | 343180327ec3be87e1290a44f48d697b571d4991 (diff) | |
download | FreeBSD-ports-1835e5aaa6e522026ceb33e3353896a65ebba5c2.zip FreeBSD-ports-1835e5aaa6e522026ceb33e3353896a65ebba5c2.tar.gz |
Fix a segfault in the Yahoo protocol that can occur when a user receives
new email.
Reported by: Kenneth W Cochran <kwc@TheWorld.com>
Obtained from: gaim CVS
Diffstat (limited to 'net-im/gaim')
-rw-r--r-- | net-im/gaim/Makefile | 1 | ||||
-rw-r--r-- | net-im/gaim/files/patch-src_protocols_yahoo_yahoo.c | 49 |
2 files changed, 50 insertions, 0 deletions
diff --git a/net-im/gaim/Makefile b/net-im/gaim/Makefile index ad90915..2f440eb 100644 --- a/net-im/gaim/Makefile +++ b/net-im/gaim/Makefile @@ -7,6 +7,7 @@ PORTNAME= gaim PORTVERSION= 0.59.6 +PORTREVISION= 1 CATEGORIES?= net MASTER_SITES= ${MASTER_SITE_SOURCEFORGE} MASTER_SITE_SUBDIR= ${PORTNAME} diff --git a/net-im/gaim/files/patch-src_protocols_yahoo_yahoo.c b/net-im/gaim/files/patch-src_protocols_yahoo_yahoo.c new file mode 100644 index 0000000..f538f5c --- /dev/null +++ b/net-im/gaim/files/patch-src_protocols_yahoo_yahoo.c @@ -0,0 +1,49 @@ +This patch fixes a segfault that can occur when a Yahoo user receives new +mail. This patch is from gaim CVS, and will be integrated in the next +release. + +--- src/protocols/yahoo/yahoo.c 2002/11/12 00:50:21 1.43.2.7 ++++ src/protocols/yahoo/yahoo.c 2002/11/23 18:50:47 1.43.2.8 +@@ -259,19 +259,20 @@ + pair->key = strtol(key, NULL, 10); + accept = x; /* if x is 0 there was no key, so don't accept it */ + +- if (accept) ++ if (len - pos + 1 <= 0) { ++ /* Truncated. Garbage or something. */ ++ accept = 0; ++ } ++ ++ if (accept) { + value = g_malloc(len - pos + 1); +- x = 0; +- while (pos + 1 < len) { +- if (data[pos] == 0xc0 && data[pos + 1] == 0x80) +- break; +- if (accept) ++ x = 0; ++ while (pos + 1 < len) { ++ if (data[pos] == 0xc0 && data[pos + 1] == 0x80) ++ break; + value[x++] = data[pos++]; +- } +- if (accept) ++ } + value[x] = 0; +- pos += 2; +- if (accept) { + pair->value = g_strdup(value); + g_free(value); + pkt->hash = g_slist_append(pkt->hash, pair); +@@ -279,6 +280,11 @@ + } else { + g_free(pair); + } ++ pos += 2; ++ ++ /* Skip over garbage we've noticed in the mail notifications */ ++ if (data[0] == '9' && data[pos] == 0x01) ++ pos++; + } + } + |