Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Sep 2017 19:18:24 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r323597 - head/lib/libc/net
Message-ID:  <201709141918.v8EJIOLu065194@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Thu Sep 14 19:18:24 2017
New Revision: 323597
URL: https://svnweb.freebsd.org/changeset/base/323597

Log:
  Silently handle freeaddrinfo(NULL) for compatibility with code which
  works on other OSes.  Also avoid unnecessary NULL check, free(NULL) is
  valid.
  
  Reviewed by:	bjk (man page), hrs, hselasky, ume
  Sponsored by:	Mellanox Technologies
  MFC after:	1 week
  Differential revision:	https://reviews.freebsd.org/D12354

Modified:
  head/lib/libc/net/getaddrinfo.3
  head/lib/libc/net/getaddrinfo.c

Modified: head/lib/libc/net/getaddrinfo.3
==============================================================================
--- head/lib/libc/net/getaddrinfo.3	Thu Sep 14 18:50:40 2017	(r323596)
+++ head/lib/libc/net/getaddrinfo.3	Thu Sep 14 19:18:24 2017	(r323597)
@@ -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: head/lib/libc/net/getaddrinfo.c
==============================================================================
--- head/lib/libc/net/getaddrinfo.c	Thu Sep 14 18:50:40 2017	(r323596)
+++ head/lib/libc/net/getaddrinfo.c	Thu Sep 14 19:18:24 2017	(r323597)
@@ -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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201709141918.v8EJIOLu065194>