]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix for WKS call to getservbyname that creates allocation on exit
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Wed, 30 Aug 2023 12:31:24 +0000 (14:31 +0200)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Wed, 30 Aug 2023 12:31:24 +0000 (14:31 +0200)
  in unit test by testing numbers first and testing from the services
  list later.

doc/Changelog
sldns/str2wire.c

index 656cfdab2bb5a6062c7ca5135ac2448b2885225a..85f86ba2649545bc5f0987084345059acbff1b68 100644 (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
        - Fix for version generation race condition that ignored changes.
 
index 45e2476137453e448facf8aef4afbdbd736f7aef..fdd40e0f223844171ef539416359fbbe32a31881 100644 (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));
                } else {
                        int serv_port;
-                       struct servent *serv = getservbyname(token, proto_str);
-                       if(serv) serv_port=(int)ntohs((uint16_t)serv->s_port);
+                       if(atoi(token) != 0) serv_port=atoi(token);
+                       else if(strcmp(token, "0") == 0) serv_port=0;
                        else if(strcasecmp(token, "domain")==0) serv_port=53;
                        else {
-                               serv_port = atoi(token);
-                               if(serv_port == 0 && strcmp(token, "0") != 0) {
+                               struct servent *serv = getservbyname(token, proto_str);
+                               if(serv) serv_port=(int)ntohs((uint16_t)serv->s_port);
+                               else {
 #ifdef HAVE_ENDSERVENT
                                        endservent();
 #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,
                                                sldns_buffer_position(&strbuf));
                                }
-                               if(serv_port < 0 || serv_port > 65535) {
+                       }
+                       if(serv_port < 0 || serv_port > 65535) {
 #ifdef HAVE_ENDSERVENT
-                                       endservent();
+                               endservent();
 #endif
 #ifdef HAVE_ENDPROTOENT
-                                       endprotoent();
+                               endprotoent();
 #endif
-                                       return RET_ERR(LDNS_WIREPARSE_ERR_SYNTAX,
-                                               sldns_buffer_position(&strbuf));
-                               }
+                               return RET_ERR(LDNS_WIREPARSE_ERR_SYNTAX,
+                                       sldns_buffer_position(&strbuf));
                        }
                        if(rd_len < 1+serv_port/8+1) {
                                /* bitmap is larger, init new bytes at 0 */