- Fix for WKS call to getservbyname that creates allocation on exit

in unit test by testing numbers first and testing from the services
  list later.
This commit is contained in:
W.C.A. Wijngaards 2023-08-30 14:31:24 +02:00
parent ba1183bb6e
commit d4c4537b33
2 changed files with 16 additions and 10 deletions

View File

@ -1,3 +1,8 @@
30 August 2023: Wouter
- Fix for WKS call to getservbyname that creates allocation on exit
in unit test by testing numbers first and testing from the services
list later.
28 August 2023: Wouter 28 August 2023: Wouter
- Fix for version generation race condition that ignored changes. - Fix for version generation race condition that ignored changes.

View File

@ -2459,12 +2459,13 @@ int sldns_str2wire_wks_buf(const char* str, uint8_t* rd, size_t* len)
(void)strlcpy(proto_str, token, sizeof(proto_str)); (void)strlcpy(proto_str, token, sizeof(proto_str));
} else { } else {
int serv_port; int serv_port;
struct servent *serv = getservbyname(token, proto_str); if(atoi(token) != 0) serv_port=atoi(token);
if(serv) serv_port=(int)ntohs((uint16_t)serv->s_port); else if(strcmp(token, "0") == 0) serv_port=0;
else if(strcasecmp(token, "domain")==0) serv_port=53; else if(strcasecmp(token, "domain")==0) serv_port=53;
else { else {
serv_port = atoi(token); struct servent *serv = getservbyname(token, proto_str);
if(serv_port == 0 && strcmp(token, "0") != 0) { if(serv) serv_port=(int)ntohs((uint16_t)serv->s_port);
else {
#ifdef HAVE_ENDSERVENT #ifdef HAVE_ENDSERVENT
endservent(); endservent();
#endif #endif
@ -2474,16 +2475,16 @@ int sldns_str2wire_wks_buf(const char* str, uint8_t* rd, size_t* len)
return RET_ERR(LDNS_WIREPARSE_ERR_SYNTAX, return RET_ERR(LDNS_WIREPARSE_ERR_SYNTAX,
sldns_buffer_position(&strbuf)); sldns_buffer_position(&strbuf));
} }
if(serv_port < 0 || serv_port > 65535) { }
if(serv_port < 0 || serv_port > 65535) {
#ifdef HAVE_ENDSERVENT #ifdef HAVE_ENDSERVENT
endservent(); endservent();
#endif #endif
#ifdef HAVE_ENDPROTOENT #ifdef HAVE_ENDPROTOENT
endprotoent(); endprotoent();
#endif #endif
return RET_ERR(LDNS_WIREPARSE_ERR_SYNTAX, return RET_ERR(LDNS_WIREPARSE_ERR_SYNTAX,
sldns_buffer_position(&strbuf)); sldns_buffer_position(&strbuf));
}
} }
if(rd_len < 1+serv_port/8+1) { if(rd_len < 1+serv_port/8+1) {
/* bitmap is larger, init new bytes at 0 */ /* bitmap is larger, init new bytes at 0 */