From a6adbd05333f0cfc7365974caa452e03cbb6fa7d Mon Sep 17 00:00:00 2001 From: Nirbhay Choubey Date: Mon, 18 Mar 2013 12:44:38 +0530 Subject: 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. --- client/mysql.cc | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'client/mysql.cc') diff --git a/client/mysql.cc b/client/mysql.cc index 965b1929af8..822eeb1a95e 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -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; } -- cgit v1.2.1