"tests/vscode:/vscode.git/clone" did not exist on "b12f99682ee23dc4535ac66f5d259dd33a0b46fc"
Commit 63b122ca authored by Guolin Ke's avatar Guolin Ke
Browse files

fix array index cross when met unknown features indices.

parent 4a451b89
......@@ -249,7 +249,7 @@ public:
~Dataset();
inline void PushOneRow(int tid, data_size_t row_idx, const std::vector<double>& feature_values) {
for (size_t i = 0; i < feature_values.size(); ++i) {
for (size_t i = 0; i < feature_values.size() && i < num_total_features_; ++i) {
int feature_idx = used_feature_map_[i];
if (feature_idx >= 0) {
features_[feature_idx]->PushData(tid, row_idx, feature_values[i]);
......@@ -259,6 +259,7 @@ public:
inline void PushOneRow(int tid, data_size_t row_idx, const std::vector<std::pair<int, double>>& feature_values) {
for (auto& inner_data : feature_values) {
if (inner_data.first >= num_total_features_) { continue; }
int feature_idx = used_feature_map_[inner_data.first];
if (feature_idx >= 0) {
features_[feature_idx]->PushData(tid, row_idx, inner_data.second);
......@@ -267,6 +268,7 @@ public:
}
inline void PushOneColumn(int tid, data_size_t col_idx, const std::vector<std::pair<int, double>>& feature_values) {
if (col_idx >= num_total_features_) { return; }
int feature_idx = used_feature_map_[col_idx];
if (feature_idx >= 0) {
for (auto& inner_data : feature_values) {
......
......@@ -729,6 +729,7 @@ void DatasetLoader::ExtractFeaturesFromMemory(std::vector<std::string>& text_dat
// text_reader_->Lines()[i].shrink_to_fit();
// push data
for (auto& inner_data : oneline_features) {
if (inner_data.first >= dataset->num_total_features_) { continue; }
int feature_idx = dataset->used_feature_map_[inner_data.first];
if (feature_idx >= 0) {
// if is used feature
......@@ -764,6 +765,7 @@ void DatasetLoader::ExtractFeaturesFromMemory(std::vector<std::string>& text_dat
// text_reader_->Lines()[i].shrink_to_fit();
// push data
for (auto& inner_data : oneline_features) {
if (inner_data.first >= dataset->num_total_features_) { continue; }
int feature_idx = dataset->used_feature_map_[inner_data.first];
if (feature_idx >= 0) {
// if is used feature
......@@ -814,6 +816,7 @@ void DatasetLoader::ExtractFeaturesFromFile(const char* filename, const Parser*
dataset->metadata_.SetLabelAt(start_idx + i, static_cast<float>(tmp_label));
// push data
for (auto& inner_data : oneline_features) {
if (inner_data.first >= dataset->num_total_features_) { continue; }
int feature_idx = dataset->used_feature_map_[inner_data.first];
if (feature_idx >= 0) {
// if is used feature
......
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