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