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
This commit is contained in:
Scott Long 2020-11-14 19:04:36 +00:00
parent cf82304d7d
commit bcf9ae2751
2 changed files with 15 additions and 3 deletions

View File

@ -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);
}

View File

@ -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