vincentlaucsb / csv-parser

A high-performance, fully-featured CSV parser and serializer for modern C++.
MIT License
864 stars 144 forks source link

Bug: Segmentation Fault on `CSVStat` when No Rows #208

Closed chrishappy closed 1 month ago

chrishappy commented 1 year ago

Input:

myfile.csv

a

test.cpp:

#include "csv.hpp"

using namespace csv;

int main(int argc, char *argv[]) {

  CSVStat stats("myfile.csv");
  auto min = stats.get_mins();

  return 0;
}

Output:

$ ./fuzz_csv 
Segmentation fault
CMake Details **CMakeLists.txt** ``` cmake_minimum_required(VERSION 3.16) project(fuzz-csv-parser) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) include(FetchContent) ################################################## # From: https://github.com/vincentlaucsb/csv-parser/issues/135#issuecomment-977528169 ################################################## # Install a header-only library from github as dependency. FetchContent_Declare( csv GIT_REPOSITORY https://github.com/vincentlaucsb/csv-parser.git GIT_TAG master ) FetchContent_MakeAvailable(csv) include_directories( ${CMAKE_SOURCE_DIR}/${FolderSource} # Find headers from source folder ${csv_SOURCE_DIR}/single_include # Issue #139 for this repo ) ################################################## # End from ################################################## add_executable(fuzz_csv) target_sources(fuzz_csv PRIVATE test.cpp ) target_link_libraries(fuzz_csv csv) ``` **Full Command:** ```shell ~/e4/build-testing$ cmake ../fuzz-csv-parser/ Building CSV library using C++17 -- Configuring done -- Generating done -- Build files have been written to: ~/e4/build-testing ~/e4/build-testing$ make clean all [ 5%] Building CXX object _deps/csv-build/include/internal/CMakeFiles/csv.dir/basic_csv_parser.cpp.o [ 11%] Building CXX object _deps/csv-build/include/internal/CMakeFiles/csv.dir/col_names.cpp.o [ 16%] Building CXX object _deps/csv-build/include/internal/CMakeFiles/csv.dir/csv_format.cpp.o [ 22%] Building CXX object _deps/csv-build/include/internal/CMakeFiles/csv.dir/csv_reader.cpp.o [ 27%] Building CXX object _deps/csv-build/include/internal/CMakeFiles/csv.dir/csv_reader_iterator.cpp.o [ 33%] Building CXX object _deps/csv-build/include/internal/CMakeFiles/csv.dir/csv_row.cpp.o [ 38%] Building CXX object _deps/csv-build/include/internal/CMakeFiles/csv.dir/csv_row_json.cpp.o [ 44%] Building CXX object _deps/csv-build/include/internal/CMakeFiles/csv.dir/csv_stat.cpp.o [ 50%] Building CXX object _deps/csv-build/include/internal/CMakeFiles/csv.dir/csv_utility.cpp.o [ 55%] Linking CXX static library libcsv.a [ 55%] Built target csv [ 61%] Building CXX object CMakeFiles/fuzz_csv.dir/test.cpp.o [ 66%] Linking CXX executable fuzz_csv [ 66%] Built target fuzz_csv [ 72%] Building CXX object CMakeFiles/fuzz_csv2.dir/test2.cpp.o [ 77%] Linking CXX executable fuzz_csv2 [ 77%] Built target fuzz_csv2 [ 83%] Building CXX object _deps/csv-build/programs/CMakeFiles/csv_info.dir/csv_info.cpp.o [ 88%] Linking CXX executable csv_info [ 88%] Built target csv_info [ 94%] Building CXX object _deps/csv-build/programs/CMakeFiles/csv_stats.dir/csv_stats.cpp.o [100%] Linking CXX executable csv_stats [100%] Built target csv_stats ~/e4/build-testing$ ./fuzz_csv Segmentation fault ```
vincentlaucsb commented 1 month ago

Fixed by an earlier version but added a regression test in #228 to confirm the fix. Thanks for the report.