lineedit: plug memory leak
This commit is contained in:
parent
33b900f984
commit
86b29ea9e8
@ -81,8 +81,9 @@ static int num_ok_lines = 1;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLE_FEATURE_GETUSERNAME_AND_HOMEDIR
|
#if ENABLE_FEATURE_GETUSERNAME_AND_HOMEDIR
|
||||||
static char *user_buf = (char*)"";
|
static const char null_str[] = "";
|
||||||
static char *home_pwd_buf = (char*)"";
|
static char *user_buf;
|
||||||
|
static char *home_pwd_buf = (char*)null_str;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Put 'command_ps[cursor]', cursor++.
|
/* Put 'command_ps[cursor]', cursor++.
|
||||||
@ -311,7 +312,7 @@ static void username_tab_completion(char *ud, char *with_shash_flg)
|
|||||||
|
|
||||||
if (with_shash_flg) { /* "~/..." or "~user/..." */
|
if (with_shash_flg) { /* "~/..." or "~user/..." */
|
||||||
char *sav_ud = ud - 1;
|
char *sav_ud = ud - 1;
|
||||||
char *home = 0;
|
char *home = NULL;
|
||||||
char *temp;
|
char *temp;
|
||||||
|
|
||||||
if (*ud == '/') { /* "~/..." */
|
if (*ud == '/') { /* "~/..." */
|
||||||
@ -1119,7 +1120,7 @@ static void parse_prompt(const char *prmt_ptr)
|
|||||||
switch (c) {
|
switch (c) {
|
||||||
#if ENABLE_FEATURE_GETUSERNAME_AND_HOMEDIR
|
#if ENABLE_FEATURE_GETUSERNAME_AND_HOMEDIR
|
||||||
case 'u':
|
case 'u':
|
||||||
pbuf = user_buf;
|
pbuf = user_buf ? user_buf : (char*)"";
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case 'h':
|
case 'h':
|
||||||
@ -1143,7 +1144,7 @@ static void parse_prompt(const char *prmt_ptr)
|
|||||||
case 'w':
|
case 'w':
|
||||||
pbuf = pwd_buf;
|
pbuf = pwd_buf;
|
||||||
l = strlen(home_pwd_buf);
|
l = strlen(home_pwd_buf);
|
||||||
if (home_pwd_buf[0] != 0
|
if (l != 0
|
||||||
&& strncmp(home_pwd_buf, pbuf, l) == 0
|
&& strncmp(home_pwd_buf, pbuf, l) == 0
|
||||||
&& (pbuf[l]=='/' || pbuf[l]=='\0')
|
&& (pbuf[l]=='/' || pbuf[l]=='\0')
|
||||||
&& strlen(pwd_buf+l)<PATH_MAX
|
&& strlen(pwd_buf+l)<PATH_MAX
|
||||||
@ -1310,8 +1311,14 @@ int read_line_input(const char* prompt, char* command, int maxsize, line_input_t
|
|||||||
|
|
||||||
entry = getpwuid(geteuid());
|
entry = getpwuid(geteuid());
|
||||||
if (entry) {
|
if (entry) {
|
||||||
|
/* If we enter read_line_input for the Nth time,
|
||||||
|
* they may be already allocated! Need to free. */
|
||||||
|
free(user_buf);
|
||||||
|
if (home_pwd_buf != null_str);
|
||||||
|
free(home_pwd_buf);
|
||||||
user_buf = xstrdup(entry->pw_name);
|
user_buf = xstrdup(entry->pw_name);
|
||||||
home_pwd_buf = xstrdup(entry->pw_dir);
|
home_pwd_buf = xstrdup(entry->pw_dir);
|
||||||
|
/* They are not freed on exit (too small to bother) */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user