Bug#14685362 : MEMORY LEAKS IN MYSQL CLIENT IN

INTERACTIVE MODE

In interactive mode, libedit/readline allocates memory
for every new line entered & later the allocated memory
never gets freed.

Fixed by freeing the allocated memory blocks appropriately.
This commit is contained in:
Nirbhay Choubey 2013-03-18 12:44:38 +05:30
parent bf064c5b1d
commit 78eb581829

View File

@ -1,5 +1,5 @@
/*
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -1869,7 +1869,7 @@ static int read_and_execute(bool interactive)
String buffer;
#endif
char *line;
char *line= NULL;
char in_string=0;
ulong line_number=0;
bool ml_comment= 0;
@ -1944,6 +1944,13 @@ static int read_and_execute(bool interactive)
#else
if (opt_outfile)
fputs(prompt, OUTFILE);
/*
free the previous entered line.
Note: my_free() cannot be used here as the memory was allocated under
the readline/libedit library.
*/
if (line)
free(line);
line= readline(prompt);
#endif /* defined(__WIN__) || defined(__NETWARE__) */
@ -2003,8 +2010,17 @@ static int read_and_execute(bool interactive)
#endif
#if defined(__WIN__)
tmpbuf.free();
#else
if (interactive)
/*
free the last entered line.
Note: my_free() cannot be used here as the memory was allocated under
the readline/libedit library.
*/
free(line);
#endif
return status.exit_status;
}