svn commit: r367689 - head/lib/libutil

Scott Long scottl at FreeBSD.org
Sat Nov 14 19:04:37 UTC 2020


Author: scottl
Date: Sat Nov 14 19:04:36 2020
New Revision: 367689
URL: https://svnweb.freebsd.org/changeset/base/367689

Log:
  Fix a problem with r367686 related to the use of ssize_t.  Not sure how this
  escaped prior testing, but it should be better now.
  
  Reported by:	lots

Modified:
  head/lib/libutil/getlocalbase.c
  head/lib/libutil/libutil.h

Modified: head/lib/libutil/getlocalbase.c
==============================================================================
--- head/lib/libutil/getlocalbase.c	Sat Nov 14 18:06:35 2020	(r367688)
+++ head/lib/libutil/getlocalbase.c	Sat Nov 14 19:04:36 2020	(r367689)
@@ -31,6 +31,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/types.h>
 #include <sys/errno.h>
 #include <sys/sysctl.h>
+#include <sys/limits.h>
 #include <stdlib.h>
 #include <paths.h>
 #include <libutil.h>
@@ -66,10 +67,16 @@ getlocalbase(char *path, size_t pathlen)
 #endif
 
 	tmplen = strlcpy(path, tmppath, pathlen);
-	if ((tmplen < 0) || (tmplen >= (ssize_t)pathlen)) {
+	if ((tmplen < 0) || (tmplen >= pathlen)) {
 		errno = ENOMEM;
-		tmplen = -1;
+		return (-1);
 	}
 
-	return (tmplen);
+	/* It's unlikely that the buffer would be this big */
+	if (tmplen >= SSIZE_MAX) {
+		errno = ENOMEM;
+		return (-1);
+	}
+
+	return ((ssize_t)tmplen);
 }

Modified: head/lib/libutil/libutil.h
==============================================================================
--- head/lib/libutil/libutil.h	Sat Nov 14 18:06:35 2020	(r367688)
+++ head/lib/libutil/libutil.h	Sat Nov 14 19:04:36 2020	(r367689)
@@ -65,6 +65,11 @@ typedef	__size_t	size_t;
 #define	_SIZE_T_DECLARED
 #endif
 
+#ifndef _SSIZE_T_DECLARED
+typedef __ssize_t	ssize_t;
+#define _SSIZE_T_DECLARED
+#endif
+
 #ifndef _UID_T_DECLARED
 typedef	__uid_t		uid_t;
 #define	_UID_T_DECLARED


More information about the svn-src-all mailing list