Added bounds check to strcat.
This commit is contained in:
+36
-5
@@ -30,12 +30,12 @@ char* lcstrupr(char* string)
|
||||
return string;
|
||||
}
|
||||
|
||||
size_t lcstrcpy(char* dest, const char* source, size_t count)
|
||||
size_t lcstrcpy(char* dest, const char* source, size_t size)
|
||||
{
|
||||
if (count == 0)
|
||||
if (size == 0)
|
||||
return 0;
|
||||
|
||||
for (size_t i = 0; i < count; i++)
|
||||
for (size_t i = 0; i < size; i++)
|
||||
{
|
||||
dest[i] = source[i];
|
||||
|
||||
@@ -45,7 +45,38 @@ size_t lcstrcpy(char* dest, const char* source, size_t count)
|
||||
}
|
||||
}
|
||||
|
||||
dest[--count] = '\0';
|
||||
dest[--size] = '\0';
|
||||
|
||||
return count;
|
||||
return size;
|
||||
}
|
||||
|
||||
size_t lcstrcat(char* dest, const char* source, size_t size)
|
||||
{
|
||||
char* d = dest;
|
||||
const char* s = source;
|
||||
size_t n = size;
|
||||
size_t dlen;
|
||||
|
||||
while (n-- != 0 && *d != '\0')
|
||||
d++;
|
||||
|
||||
dlen = d - dest;
|
||||
n = size - dlen;
|
||||
|
||||
if (n == 0)
|
||||
return(dlen + strlen(s));
|
||||
|
||||
while (*s != '\0')
|
||||
{
|
||||
if (n != 1)
|
||||
{
|
||||
*d++ = *s;
|
||||
n--;
|
||||
}
|
||||
s++;
|
||||
}
|
||||
|
||||
*d = '\0';
|
||||
|
||||
return (dlen + (s - source));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user