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

Gleb Smirnoff glebius at FreeBSD.org
Wed Dec 7 23:19:47 UTC 2016


Author: glebius
Date: Wed Dec  7 23:19:46 2016
New Revision: 309689
URL: https://svnweb.freebsd.org/changeset/base/309689

Log:
  Merge rr309688: address regressions in SA-16:37.libc.
  
  PR:		215105
  Submitted by:	<jtd2004a sbcglobal.net>

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

Modified: stable/11/lib/libc/net/linkaddr.c
==============================================================================
--- stable/11/lib/libc/net/linkaddr.c	Wed Dec  7 23:18:00 2016	(r309688)
+++ stable/11/lib/libc/net/linkaddr.c	Wed Dec  7 23:19:46 2016	(r309689)
@@ -125,7 +125,7 @@ link_ntoa(const struct sockaddr_dl *sdl)
 	static char obuf[64];
 	_Static_assert(sizeof(obuf) >= IFNAMSIZ + 20, "obuf is too small");
 	char *out;
-	const char *in, *inlim;
+	const u_char *in, *inlim;
 	int namelen, i, rem;
 
 	namelen = (sdl->sdl_nlen <= IFNAMSIZ) ? sdl->sdl_nlen : IFNAMSIZ;
@@ -142,11 +142,11 @@ link_ntoa(const struct sockaddr_dl *sdl)
 		}
 	}
 
-	in = (const char *)sdl->sdl_data + sdl->sdl_nlen;
+	in = (const u_char *)sdl->sdl_data + sdl->sdl_nlen;
 	inlim = in + sdl->sdl_alen;
 
 	while (in < inlim && rem > 1) {
-		if (in != (const char *)sdl->sdl_data + sdl->sdl_nlen) {
+		if (in != (const u_char *)sdl->sdl_data + sdl->sdl_nlen) {
 			*out++ = '.';
 			rem--;
 		}
@@ -154,15 +154,14 @@ link_ntoa(const struct sockaddr_dl *sdl)
 		if (i > 0xf) {
 			if (rem < 3)
 				break;
+			*out++ = hexlist[i >> 4];
 			*out++ = hexlist[i & 0xf];
-			i >>= 4;
-			*out++ = hexlist[i];
 			rem -= 2;
 		} else {
 			if (rem < 2)
 				break;
 			*out++ = hexlist[i];
-			rem++;
+			rem--;
 		}
 	}
 	*out = 0;


More information about the svn-src-all mailing list