Fix getlogin_r memory leak.
This commit is contained in:
parent
a22cca77f5
commit
8322d5f82c
|
@ -38,6 +38,7 @@ extern "C" int getlogin_r(char* buf, size_t size)
|
||||||
size_t pwdbuflen = 0;
|
size_t pwdbuflen = 0;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
// TODO: Potential overflow.
|
||||||
size_t new_pwdbuflen = pwdbuflen ? 2 * pwdbuflen : 64;
|
size_t new_pwdbuflen = pwdbuflen ? 2 * pwdbuflen : 64;
|
||||||
char* new_pwdbuf = (char*) realloc(pwdbuf, new_pwdbuflen);
|
char* new_pwdbuf = (char*) realloc(pwdbuf, new_pwdbuflen);
|
||||||
if ( !new_pwdbuf )
|
if ( !new_pwdbuf )
|
||||||
|
@ -50,10 +51,9 @@ extern "C" int getlogin_r(char* buf, size_t size)
|
||||||
return free(pwdbuf), errno = errnum, -1;
|
return free(pwdbuf), errno = errnum, -1;
|
||||||
|
|
||||||
const char* username = passwd->pw_name;
|
const char* username = passwd->pw_name;
|
||||||
size_t username_len = strlen(username);
|
if ( size <= strlcpy(buf, username, size) )
|
||||||
if ( size < (username_len + 1) * sizeof(char) )
|
|
||||||
return free(pwdbuf), errno = ERANGE, -1;
|
return free(pwdbuf), errno = ERANGE, -1;
|
||||||
strcpy(buf, username);
|
free(pwdbuf);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue