X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Ffnet-dc.c;h=198672f6631478f19250076dc3f791490f1f1421;hb=1315d02ac996285e943de172ccd6c420633eeeec;hp=54daeb7aeb2a9ace9ae7cd892f67ec2b4eed4fd5;hpb=2a157d1a2ca04bc1a5c8b2e9de69697bda89ce1c;p=doldaconnect.git diff --git a/daemon/fnet-dc.c b/daemon/fnet-dc.c index 54daeb7..198672f 100644 --- a/daemon/fnet-dc.c +++ b/daemon/fnet-dc.c @@ -1083,7 +1083,8 @@ static void cmd_search(struct socket *sk, struct fnetnode *fn, char *cmd, char * struct sockaddr_in addr; struct sharecache *node; int minsize, maxsize; - int dotth, buflen; + int dotth; + size_t buflen; int termnum, satisfied, skipcheck; int level, tersat[32]; wchar_t *terms[32]; @@ -1166,10 +1167,11 @@ static void cmd_search(struct socket *sk, struct fnetnode *fn, char *cmd, char * if(!dotth && !strncmp(p, "TTH:", 4)) { dotth = 1; - if((buf = base32decode(p + 4, &buflen)) == NULL) - goto out; - if(buflen != 24) + if(((buf = base32decode(p + 4, &buflen)) == NULL) || (buflen != 24)) + { + free(buf); goto out; + } memcpy(hashtth, buf, 24); free(buf); } else { @@ -1600,6 +1602,7 @@ static void cmd_peerlock(struct socket *sk, struct dcpeer *peer, char *cmd, char peer->transfer = transfer; qstrf(sk, "$Direction %s %i|", (peer->direction == TRNSD_UP)?"Upload":"Download", rand() % 10000); qstrf(sk, "$Key %s|", key); + free(key); } else { if(peer->key != NULL) free(peer->key); @@ -2596,7 +2599,7 @@ static void dctransgotdata(struct transfer *transfer, struct dcpeer *peer) { int ret; void *buf; - char outbuf[1024]; + unsigned char outbuf[1024]; z_stream *cstr; size_t bufsize; @@ -3172,6 +3175,7 @@ static void peerconnect(struct socket *sk, int err, struct fnetnode *fn) if(err != 0) { putfnetnode(fn); + putsock(sk); return; } hub = fn->data;