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
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to