mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 04:47:35 +00:00
LibC: Prevent slowness and overrun in strdup/strndup
strdup: Because the length is already known at the time of copying, there is no need to use strcpy (which has to check every single byte, and thus tends to be slower than memcpy). strndup: If 'str' is not NUL-terminated, strndup used to run off into the adjacent memory region. This can be fixed by using the proper strlen variant: strnlen.
This commit is contained in:
parent
2adc3c61a2
commit
9795c61464
1 changed files with 3 additions and 2 deletions
|
@ -94,13 +94,14 @@ char* strdup(const char* str)
|
|||
{
|
||||
size_t len = strlen(str);
|
||||
char* new_str = (char*)malloc(len + 1);
|
||||
strcpy(new_str, str);
|
||||
memcpy(new_str, str, len);
|
||||
new_str[len] = '\0';
|
||||
return new_str;
|
||||
}
|
||||
|
||||
char* strndup(const char* str, size_t maxlen)
|
||||
{
|
||||
size_t len = min(strlen(str), maxlen);
|
||||
size_t len = strnlen(str, maxlen);
|
||||
char* new_str = (char*)malloc(len + 1);
|
||||
memcpy(new_str, str, len);
|
||||
new_str[len] = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue