From: Marcin Siodelski Date: Tue, 6 Sep 2016 14:15:44 +0000 (+0200) Subject: [4252] CID 1327386. CSVFile::getColumnIndex must not return negative value. X-Git-Tag: trac5006_base~31^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4e592c59f0015abdb8a44897e673811e0e44d510;p=thirdparty%2Fkea.git [4252] CID 1327386. CSVFile::getColumnIndex must not return negative value. --- diff --git a/src/lib/util/csv_file.cc b/src/lib/util/csv_file.cc index d98363e735..4c746e2f3a 100644 --- a/src/lib/util/csv_file.cc +++ b/src/lib/util/csv_file.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2014-2016 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -122,7 +123,7 @@ CSVFile::addColumn(const std::string& col_name) { void CSVFile::addColumnInternal(const std::string& col_name) { - if (getColumnIndex(col_name) >= 0) { + if (std::find(cols_.begin(), cols_.end(), col_name) != cols_.end()) { isc_throw(CSVFileError, "attempt to add duplicate column '" << col_name << "'"); } @@ -199,14 +200,14 @@ CSVFile::size() const { return (pos); } -int +size_t CSVFile::getColumnIndex(const std::string& col_name) const { for (size_t i = 0; i < cols_.size(); ++i) { if (cols_[i] == col_name) { - return (static_cast(i)); + return (i); } } - return (-1); + isc_throw(isc::OutOfRange, "column '" << col_name << "' doesn't exist"); } std::string diff --git a/src/lib/util/csv_file.h b/src/lib/util/csv_file.h index c32f77c47d..03a4783748 100644 --- a/src/lib/util/csv_file.h +++ b/src/lib/util/csv_file.h @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2014-2016 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -354,9 +354,9 @@ public: /// This function is exception safe. /// /// @param col_name Name of the column. - /// @return Index of the column or negative value if the column doesn't - /// exist. - int getColumnIndex(const std::string& col_name) const; + /// @return Index of the column. + /// @throw OutOfRange if column with such name doesn't exist. + size_t getColumnIndex(const std::string& col_name) const; /// @brief Returns the name of the column. /// diff --git a/src/lib/util/versioned_csv_file.cc b/src/lib/util/versioned_csv_file.cc index c9c1507e64..fc03b55126 100644 --- a/src/lib/util/versioned_csv_file.cc +++ b/src/lib/util/versioned_csv_file.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2015 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2015-2016 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -29,13 +29,15 @@ VersionedCSVFile::addColumn(const std::string& name, void VersionedCSVFile::setMinimumValidColumns(const std::string& column_name) { - int index = getColumnIndex(column_name); - if (index < 0) { + try { + int index = getColumnIndex(column_name); + minimum_valid_columns_ = index + 1; + + } catch (...) { isc_throw(VersionedCSVFileError, - "setMinimumValidColumns: " << column_name << " is defined"); + "setMinimumValidColumns: " << column_name << " is not " + "defined"); } - - minimum_valid_columns_ = index + 1; } size_t