Fix more memory leaks

This commit is contained in:
Daniel Winzen 2022-12-07 21:22:01 +01:00
parent c0069df572
commit f27789c5f6
No known key found for this signature in database
GPG Key ID: 222FCC3F35C41077

View File

@ -505,7 +505,10 @@ int MODULEMAINFUNC (int argc, char** argv){
"" ""
#endif #endif
); );
srvfree(&srv);
if(cbc_string)myfree(cbc_string);
if(cbl_string)myfree(cbl_string);
if(fp) fclose(fp);
return (1); return (1);
} }
#endif #endif
@ -538,6 +541,10 @@ int MODULEMAINFUNC (int argc, char** argv){
"" ""
#endif #endif
); );
srvfree(&srv);
if(cbc_string)myfree(cbc_string);
if(cbl_string)myfree(cbl_string);
if(fp) fclose(fp);
return (1); return (1);
} }
srv.target = (unsigned char *)mystrdup(argv[i+1]); srv.target = (unsigned char *)mystrdup(argv[i+1]);
@ -556,6 +563,10 @@ int MODULEMAINFUNC (int argc, char** argv){
} }
defparam.clisock = 0; defparam.clisock = 0;
if(! (newparam = myalloc (sizeof(defparam)))){ if(! (newparam = myalloc (sizeof(defparam)))){
srvfree(&srv);
if(cbc_string)myfree(cbc_string);
if(cbl_string)myfree(cbl_string);
if(fp) fclose(fp);
return 2; return 2;
}; };
*newparam = defparam; *newparam = defparam;
@ -601,6 +612,9 @@ int MODULEMAINFUNC (int argc, char** argv){
} }
if( sock == INVALID_SOCKET) { if( sock == INVALID_SOCKET) {
perror("socket()"); perror("socket()");
srvfree(&srv);
if(cbl_string)myfree(cbl_string);
if(fp) fclose(fp);
return -2; return -2;
} }
setopts(sock, srv.lissockopts); setopts(sock, srv.lissockopts);
@ -619,6 +633,9 @@ int MODULEMAINFUNC (int argc, char** argv){
#if defined SO_BINDTODEVICE #if defined SO_BINDTODEVICE
if(srv.ibindtodevice && so._setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, srv.ibindtodevice, strlen(srv.ibindtodevice) + 1)) { if(srv.ibindtodevice && so._setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, srv.ibindtodevice, strlen(srv.ibindtodevice) + 1)) {
dolog(&defparam, (unsigned char *)"failed to bind device"); dolog(&defparam, (unsigned char *)"failed to bind device");
srvfree(&srv);
if(cbc_string)myfree(cbc_string);
if(fp) fclose(fp);
return -12; return -12;
} }
#elif defined IP_BOUND_IF #elif defined IP_BOUND_IF
@ -627,11 +644,17 @@ int MODULEMAINFUNC (int argc, char** argv){
idx = if_nametoindex(srv.ibindtodevice); idx = if_nametoindex(srv.ibindtodevice);
if(!idx || (*SAFAMILY(&srv.intsa) == AF_INET && setsockopt(sock, IPPROTO_IP, IP_BOUND_IF, &idx, sizeof(idx)))) { if(!idx || (*SAFAMILY(&srv.intsa) == AF_INET && setsockopt(sock, IPPROTO_IP, IP_BOUND_IF, &idx, sizeof(idx)))) {
dolog(&defparam, (unsigned char *)"failed to bind device"); dolog(&defparam, (unsigned char *)"failed to bind device");
srvfree(&srv);
if(cbc_string)myfree(cbc_string);
if(fp) fclose(fp);
return -12; return -12;
} }
#ifndef NOIPV6 #ifndef NOIPV6
if((*SAFAMILY(&srv.intsa) == AF_INET6 && so._setsockopt(sock, IPPROTO_IPV6, IPV6_BOUND_IF, &idx, sizeof(idx)))) { if((*SAFAMILY(&srv.intsa) == AF_INET6 && so._setsockopt(sock, IPPROTO_IPV6, IPV6_BOUND_IF, &idx, sizeof(idx)))) {
dolog(&defparam, (unsigned char *)"failed to bind device"); dolog(&defparam, (unsigned char *)"failed to bind device");
srvfree(&srv);
if(cbc_string)myfree(cbc_string);
if(fp) fclose(fp);
return -12; return -12;
} }
#endif #endif
@ -645,6 +668,9 @@ int MODULEMAINFUNC (int argc, char** argv){
sleeptime = (sleeptime<<1); sleeptime = (sleeptime<<1);
if(!sleeptime) { if(!sleeptime) {
so._closesocket(sock); so._closesocket(sock);
srvfree(&srv);
if(cbc_string)myfree(cbc_string);
if(fp) fclose(fp);
return -3; return -3;
} }
} }
@ -652,6 +678,9 @@ int MODULEMAINFUNC (int argc, char** argv){
if(so._listen (sock, srv.backlog?srv.backlog : 1+(srv.maxchild>>3))==-1) { if(so._listen (sock, srv.backlog?srv.backlog : 1+(srv.maxchild>>3))==-1) {
sprintf((char *)buf, "listen(): %s", strerror(errno)); sprintf((char *)buf, "listen(): %s", strerror(errno));
if(!srv.silent)dolog(&defparam, buf); if(!srv.silent)dolog(&defparam, buf);
srvfree(&srv);
if(cbc_string)myfree(cbc_string);
if(fp) fclose(fp);
return -4; return -4;
} }
} }
@ -667,6 +696,9 @@ int MODULEMAINFUNC (int argc, char** argv){
parsehost(srv.family, cbl_string, (struct sockaddr *)&cbsa); parsehost(srv.family, cbl_string, (struct sockaddr *)&cbsa);
if((srv.cbsock=so._socket(SASOCK(&cbsa), SOCK_STREAM, IPPROTO_TCP))==INVALID_SOCKET) { if((srv.cbsock=so._socket(SASOCK(&cbsa), SOCK_STREAM, IPPROTO_TCP))==INVALID_SOCKET) {
dolog(&defparam, (unsigned char *)"Failed to allocate connect back socket"); dolog(&defparam, (unsigned char *)"Failed to allocate connect back socket");
srvfree(&srv);
myfree(cbl_string);
if(fp) fclose(fp);
return -6; return -6;
} }
opt = 1; opt = 1;
@ -680,10 +712,16 @@ int MODULEMAINFUNC (int argc, char** argv){
if(so._bind(srv.cbsock, (struct sockaddr*)&cbsa, SASIZE(&cbsa))==-1) { if(so._bind(srv.cbsock, (struct sockaddr*)&cbsa, SASIZE(&cbsa))==-1) {
dolog(&defparam, (unsigned char *)"Failed to bind connect back socket"); dolog(&defparam, (unsigned char *)"Failed to bind connect back socket");
srvfree(&srv);
myfree(cbl_string);
if(fp) fclose(fp);
return -7; return -7;
} }
if(so._listen(srv.cbsock, 1 + (srv.maxchild>>4))==-1) { if(so._listen(srv.cbsock, 1 + (srv.maxchild>>4))==-1) {
dolog(&defparam, (unsigned char *)"Failed to listen connect back socket"); dolog(&defparam, (unsigned char *)"Failed to listen connect back socket");
srvfree(&srv);
myfree(cbl_string);
if(fp) fclose(fp);
return -8; return -8;
} }
} }