Fix unlikely pointer overflow in abspath

* src/function.c (abspath): len is now ptrdiff_t,
to avoid GCC warning about comparing signed to unsigned.
It really is a pointer difference, after all.
Rejigger comparision to avoid undefined behavior
if dest + len is an invalid pointer.
This commit is contained in:
Paul Eggert 2024-08-05 01:30:44 -07:00 committed by Paul Smith
parent c23a7e6232
commit bba4427b5d

View file

@ -2119,7 +2119,7 @@ abspath (const char *name, char *apath)
for (start = end = name; *start != '\0'; start = end)
{
size_t len;
ptrdiff_t len;
/* Skip sequence of multiple path-separators. */
while (ISDIRSEP (*start))
@ -2147,7 +2147,7 @@ abspath (const char *name, char *apath)
if (! ISDIRSEP (dest[-1]))
*dest++ = '/';
if (dest + len >= apath_limit)
if (apath_limit - dest <= len)
return NULL;
dest = mempcpy (dest, start, len);