# HG changeset patch # User Mikael Berthe # Date 1163701812 -3600 # Node ID 6d68a65b5ec6926e1207cdf64dd4091383ba641a # Parent fc60607070225d50dcec3be99f90a8b85e913770 [BP-3225a1ba050d] Fix a potential libconnwrap issue diff -r fc6060707022 -r 6d68a65b5ec6 mcabber/connwrap/connwrap.c --- a/mcabber/connwrap/connwrap.c Thu Nov 16 19:30:12 2006 +0100 +++ b/mcabber/connwrap/connwrap.c Thu Nov 16 19:30:12 2006 +0100 @@ -150,7 +150,11 @@ static sslsock *addsock(int fd) { sslsock *p; - socks = (sslsock *) realloc(socks, sizeof(sslsock)*++sockcount); + + if (socks) + socks = (sslsock *) realloc(socks, sizeof(sslsock)*++sockcount); + else + socks = (sslsock *) malloc(sizeof(sslsock)*++sockcount); p = &socks[sockcount-1]; @@ -168,21 +172,27 @@ sslsock *nsocks; nsockcount = 0; - nsocks = (sslsock *) malloc(sizeof(sslsock)*(sockcount-1)); + + if (sockcount > 1) { + nsocks = (sslsock *) malloc(sizeof(sslsock)*(sockcount-1)); - for(i = 0; i < sockcount; i++) { - if(socks[i].fd != fd) { - nsocks[nsockcount++] = socks[i]; - } else { - SSL_free(socks[i].ssl); + for(i = 0; i < sockcount; i++) { + if(socks[i].fd != fd) { + nsocks[nsockcount++] = socks[i]; + } else { + SSL_free(socks[i].ssl); + } } + + } else { + if (ctx) + SSL_CTX_free(ctx); + ctx = 0; + nsocks = 0; } - free(socks); - - SSL_CTX_free(ctx); - ctx = 0; - + if (socks) + free(socks); socks = nsocks; sockcount = nsockcount; }