svn commit: r323857 - stable/11/lib/libc/net

Konstantin Belousov kib at FreeBSD.org
Thu Sep 21 10:16:27 UTC 2017


Author: kib
Date: Thu Sep 21 10:16:25 2017
New Revision: 323857
URL: https://svnweb.freebsd.org/changeset/base/323857

Log:
  MFC r323597:
  Handle freeaddrinfo(NULL).

Modified:
  stable/11/lib/libc/net/getaddrinfo.3
  stable/11/lib/libc/net/getaddrinfo.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/lib/libc/net/getaddrinfo.3
==============================================================================
--- stable/11/lib/libc/net/getaddrinfo.3	Thu Sep 21 10:14:43 2017	(r323856)
+++ stable/11/lib/libc/net/getaddrinfo.3	Thu Sep 21 10:16:25 2017	(r323857)
@@ -18,7 +18,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd December 21, 2015
+.Dd September 13, 2017
 .Dt GETADDRINFO 3
 .Os
 .Sh NAME
@@ -351,6 +351,17 @@ pointer should be a
 .Li addrinfo
 structure created by a call to
 .Fn getaddrinfo .
+.Sh IMPLEMENTATION NOTES
+The behavior of
+.Li freeadrinfo(NULL)
+is left unspecified by both
+.St -susv4
+and
+.Dv "RFC 3493" .
+The current implementation ignores a
+.Dv NULL
+argument for compatibility with programs that rely on the implementation
+details of other operating systems.
 .Sh RETURN VALUES
 .Fn getaddrinfo
 returns zero on success or one of the error codes listed in

Modified: stable/11/lib/libc/net/getaddrinfo.c
==============================================================================
--- stable/11/lib/libc/net/getaddrinfo.c	Thu Sep 21 10:14:43 2017	(r323856)
+++ stable/11/lib/libc/net/getaddrinfo.c	Thu Sep 21 10:16:25 2017	(r323857)
@@ -35,7 +35,7 @@
  *   in the source code.  This is because RFC2553 is silent about which error
  *   code must be returned for which situation.
  * - freeaddrinfo(NULL).  RFC2553 is silent about it.  XNET 5.2 says it is
- *   invalid.  current code - SEGV on freeaddrinfo(NULL)
+ *   invalid.  Current code accepts NULL to be compatible with other OSes.
  *
  * Note:
  * - The code filters out AFs that are not supported by the kernel,
@@ -359,14 +359,13 @@ freeaddrinfo(struct addrinfo *ai)
 {
 	struct addrinfo *next;
 
-	do {
+	while (ai != NULL) {
 		next = ai->ai_next;
-		if (ai->ai_canonname)
-			free(ai->ai_canonname);
+		free(ai->ai_canonname);
 		/* no need to free(ai->ai_addr) */
 		free(ai);
 		ai = next;
-	} while (ai);
+	}
 }
 
 static int


More information about the svn-src-all mailing list