Commit 4e592c59 authored by Marcin Siodelski's avatar Marcin Siodelski
Browse files

[4252] CID 1327386. CSVFile::getColumnIndex must not return negative value.

parent 1486d13c
// 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 <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/constants.hpp>
#include <boost/algorithm/string/split.hpp>
#include <algorithm>
#include <fstream>
#include <sstream>
......@@ -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<int>(i));
return (i);
}
}
return (-1);
isc_throw(isc::OutOfRange, "column '" << col_name << "' doesn't exist");
}
std::string
......
// 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.
///
......
// 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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment