diff --git a/CMakeLists.txt b/CMakeLists.txt index 31e21ed..b4d1564 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -196,6 +196,7 @@ if(RAPIDCSV_BUILD_TESTS) add_unit_test(test104) add_unit_test(test105) add_unit_test(test106) + add_unit_test(test107) # perf tests add_perf_test(ptest001) diff --git a/src/rapidcsv.h b/src/rapidcsv.h index bc83e0e..3111db9 100644 --- a/src/rapidcsv.h +++ b/src/rapidcsv.h @@ -2,7 +2,7 @@ * rapidcsv.h * * URL: https://github.com/d99kris/rapidcsv - * Version: 8.95 + * Version: 8.96 * * Copyright (C) 2017-2026 Kristofer Berggren * All rights reserved. @@ -1473,9 +1473,12 @@ namespace rapidcsv { if (mLabelParams.mColumnNameIdx >= 0) { - return std::vector(mData.at(static_cast(mLabelParams.mColumnNameIdx)).begin() + - (mLabelParams.mRowNameIdx + 1), - mData.at(static_cast(mLabelParams.mColumnNameIdx)).end()); + const std::vector& labelRow = mData.at(static_cast(mLabelParams.mColumnNameIdx)); + const size_t offset = static_cast(mLabelParams.mRowNameIdx + 1); + if (offset <= labelRow.size()) + { + return std::vector(labelRow.begin() + static_cast(offset), labelRow.end()); + } } return std::vector(); diff --git a/tests/test107.cpp b/tests/test107.cpp new file mode 100644 index 0000000..7114454 --- /dev/null +++ b/tests/test107.cpp @@ -0,0 +1,31 @@ +// test107.cpp - get column labels of empty label row + +#include +#include "unittest.h" + +int main() +{ + int rv = 0; + + try + { + // Empty document, specify column and row labels available + std::string csv = ""; + std::istringstream s(csv); + rapidcsv::Document doc(s, rapidcsv::LabelParams(0, 0)); + + // InsertRow create a row with 0 columns + doc.InsertRow(0); + + // Get column names + std::vector names = doc.GetColumnNames(); + unittest::ExpectEqual(size_t, names.size(), size_t(0)); + } + catch (const std::exception& ex) + { + std::cout << "exception: " << ex.what() << std::endl; + rv = 1; + } + + return rv; +}