fixed memory leak in CSVParser::parse() - a Space struct was allocated but never freed

This commit is contained in:
Tomasz Sowa 2021-05-19 22:31:18 +02:00
parent 604b47db32
commit f8d24de386
3 changed files with 30 additions and 12 deletions

View File

@ -18,10 +18,28 @@ tests: FORCE
tests-gcc10: FORCE
env CXX=g++10 CXXFLAGS="-Wl,-rpath=/usr/local/lib/gcc10/ -Wall -pedantic -O0 -g3 -std=c++20 -I../src -I/usr/local/include" $(MAKE) -C src
env CXX=g++10 CXXFLAGS="-Wl,-rpath=/usr/local/lib/gcc10/ -Wall -pedantic -O0 -g3 -std=c++20 -I../src -I/usr/local/include" $(MAKE) -C tests
#env CXX=clang++ CXXFLAGS="-fsanitize=address -Wall -pedantic -O0 -g3 -std=c++20 -I../src -I/usr/local/include" $(MAKE) -C src
#env CXX=clang++ CXXFLAGS="-fsanitize=address -Wall -pedantic -O0 -g3 -std=c++20 -I../src -I/usr/local/include" $(MAKE) -C tests
env CXX=g++10 CXXFLAGS="-Wl,-rpath=/usr/local/lib/gcc10/ -Wall -pedantic -O0 -g3 -std=c++20 -fmax-errors=1 -I../src -I/usr/local/include" $(MAKE) -C src
env CXX=g++10 CXXFLAGS="-Wl,-rpath=/usr/local/lib/gcc10/ -Wall -pedantic -O0 -g3 -std=c++20 -fmax-errors=1 -I../src -I/usr/local/include" $(MAKE) -C tests
tests-clang: FORCE
env CXX=clang++ CXXFLAGS="-Wall -pedantic -O0 -g3 -std=c++20 -I../src -I/usr/local/include" $(MAKE) -C src
env CXX=clang++ CXXFLAGS="-Wall -pedantic -O0 -g3 -std=c++20 -I../src -I/usr/local/include" $(MAKE) -C tests
tests-clang-sa: FORCE
env CXX=clang++ CXXFLAGS="-fsanitize=address -Wall -pedantic -O0 -g3 -std=c++20 -I../src -I/usr/local/include" $(MAKE) -C src
env CXX=clang++ CXXFLAGS="-fsanitize=address -Wall -pedantic -O0 -g3 -std=c++20 -I../src -I/usr/local/include" $(MAKE) -C tests
tests-clang-sm: FORCE
env CXX=clang++ CXXFLAGS="-fsanitize=memory -Wall -pedantic -O3 -g3 -std=c++20 -I../src -I/usr/local/include" $(MAKE) -C src
env CXX=clang++ CXXFLAGS="-fsanitize=memory -Wall -pedantic -O3 -g3 -std=c++20 -I../src -I/usr/local/include" $(MAKE) -C tests
tests-clang-su: FORCE
env CXX=clang++ CXXFLAGS="-fsanitize=undefined -Wall -pedantic -O3 -g3 -std=c++20 -I../src -I/usr/local/include" $(MAKE) -C src
env CXX=clang++ CXXFLAGS="-fsanitize=undefined -Wall -pedantic -O3 -g3 -std=c++20 -I../src -I/usr/local/include" $(MAKE) -C tests
clean: FORCE

View File

@ -161,16 +161,16 @@ void CSVParser::parse()
*
*/
Space * row_space = new Space();
row_space->set_empty_table();
Space row_space;
row_space.set_empty_table();
parse_row(row_space);
space->add(row_space);
space->add(std::move(row_space));
}
}
void CSVParser::parse_row(Space * row_space)
void CSVParser::parse_row(Space & row_space)
{
bool continue_reading;
@ -182,9 +182,9 @@ void CSVParser::parse_row(Space * row_space)
}
bool CSVParser::read_value_to(Space * row_space)
bool CSVParser::read_value_to(Space & row_space)
{
Space & space_value = row_space->add_empty_space();
Space & space_value = row_space.add_empty_space();
space_value.set_empty_wstring();
if( lastc == '"' )

View File

@ -135,9 +135,9 @@ protected:
void parse();
void parse_row(Space * row_space);
void parse_row(Space & row_space);
bool read_value_to(Space * row_space);
bool read_value_to(Space & row_space);
bool read_quoted_value_to(std::wstring & value);
bool read_non_quoted_value_to(std::wstring & value);