Unverified Commit f53fa691 authored by José Morales's avatar José Morales Committed by GitHub
Browse files

[c-api] check number of features when retrieving number of bins (#5183)

* check number of features when retrieving number of bins

* check for negative values

* lint
parent d893cd1f
......@@ -1555,6 +1555,11 @@ int LGBM_DatasetGetFeatureNumBin(DatasetHandle handle,
int* out) {
API_BEGIN();
auto dataset = reinterpret_cast<Dataset*>(handle);
int num_features = dataset->num_total_features();
if (feature < 0 || feature >= num_features) {
Log::Fatal("Tried to retrieve number of bins for feature index %d, "
"but the valid feature indices are [0, %d].", feature, num_features - 1);
}
int inner_idx = dataset->InnerFeatureIndex(feature);
if (inner_idx >= 0) {
*out = dataset->FeatureNumBin(inner_idx);
......
......@@ -674,6 +674,16 @@ def test_feature_num_bin(min_data_in_bin):
]
actual_num_bins = [ds.feature_num_bin(i) for i in range(X.shape[1])]
assert actual_num_bins == expected_num_bins
# check for feature indices outside of range
num_features = X.shape[1]
with pytest.raises(
lgb.basic.LightGBMError,
match=(
f'Tried to retrieve number of bins for feature index {num_features}, '
f'but the valid feature indices are \\[0, {num_features - 1}\\].'
)
):
ds.feature_num_bin(num_features)
def test_feature_num_bin_with_max_bin_by_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