SeedDatasetFilter(criteria=[]) silently matches no datasets
Maintainer antworten meist innerhalb von 2 Tagen
@bIackr0se arbeitet bereits daran.
Seit 01.10.2026.
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 57/100
Rechercherichtung
Start with SeedDatasetFilter.init and _validate() in pyrit/datasets/seed_datasets/seed_metadata.py, then trace _match_filter_to_metadata in seed_dataset_provider.py. Run the reproduction in the issue and add regression coverage for criteria=[]; done means it no longer silently produces an empty result, using one agreed behavior for empty criteria.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Describe the bug
SeedDatasetFilter(criteria=[]) constructs without error or warning and then matches no dataset, regardless of what is registered.
__init__ takes the criteria is not None branch and stores the empty list as-is:
# pyrit/datasets/seed_datasets/seed_metadata.py
if criteria is not None:
self.criteria = criteria
elif kwargs:
self.criteria = [SeedDatasetMetadata(**kwargs)]
else:
self.criteria = [SeedDatasetMetadata()]
_validate() then has nothing to iterate, and matching reduces to any() over an empty generator:
# pyrit/datasets/seed_datasets/seed_dataset_provider.py
return any(
cls._match_single_criterion(metadata=metadata, criterion=c, strict_match=dataset_filter.strict_match)
for c in dataset_filter.criteria
)
so every dataset evaluates to False. The caller gets an empty result list with no indication that the filter itself was the problem — the likely shape being a criteria list assembled dynamically that happens to come out empty.
This is adjacent to, but distinct from, the empty-set-on-an-axis case handled in #2907: that one is about set() on a single axis having opposite meanings under strict_match, whereas this is an empty OR-list across criteria and has no strict_match interaction at all. Noting it here so the two aren't conflated — #2907's description and the docstring on TestStrictMatchSingularFieldValidation::test_strict_match_validates_criteria_list both use the phrase "criteria=[]" loosely to mean "via the criteria-list form," which makes this gap read as already covered when it isn't.
Steps/Code to Reproduce
from pyrit.datasets.seed_datasets.seed_dataset_provider import SeedDatasetProvider
from pyrit.datasets.seed_datasets.seed_metadata import SeedDatasetFilter, SeedDatasetMetadata
f = SeedDatasetFilter(criteria=[])
print(f.criteria) # []
print(f.has_all_tag) # False
metadata = SeedDatasetMetadata(tags={"safety"}, size={"small"})
print(SeedDatasetProvider._match_filter_to_metadata(metadata=metadata, dataset_filter=f))
Expected Results
Either:
ValueErrorat construction, consistent with the other impossible-filter guards already in_validate()(strict_matchwith multiple values for a singular field, and the empty-axis check added in #2907); or- treat
criteria=[]the same as "no criteria supplied" and fall through to[SeedDatasetMetadata()], i.e. an unfiltered match-all filter.
Option 1 looks more consistent with the existing validation, which prefers to fail loudly on a filter that cannot express a meaningful query. Option 2 is defensible if an empty criteria list is considered a legitimate "no constraints" input. Either is preferable to the current silent empty result.
Actual Results
No exception and no warning. f.criteria is [] and _match_filter_to_metadata returns False for every dataset, so get_all_dataset_names_async(filters=f) returns an empty list.
Versions
- OS: Windows
- Python version: 3.14.2
- PyRIT version: 1.2.0.dev0 (installed from
mainin editable mode)
- Vorherrschende Sprache
- Python
- Sterne
- 4.7k
- Forks
- 1k
- Ø Merge
- 2 T. 4 Std.
- Gemergte PRs (30 T.)
- 484
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Kein Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus microsoft/PyRIT
-
Scenario objective previews can split supplementary Unicode during truncationEvtl. vergeben @Aadithya-kl hat das vor 1 Tag übernommen. OffenBug: triage help wanted
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
microsoft/PyRIT#3870 · 1 Kommentar · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 2 Tagen
-
URLDataTypeSerializer treats mixed-case HTTP(S) schemes as local pathsEvtl. vergeben @akhil9tiet hat das vor 1 Tag übernommen. OffenBug: triage help wanted
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
microsoft/PyRIT#3861 · 1 Kommentar · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Parameter required status is lost after wire round-tripEvtl. vergeben @its-amann hat das vor 1 Tag übernommen. OffenBug: triage help wanted
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
microsoft/PyRIT#3854 · 1 Kommentar · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 2 Tagen
-
BUG: LLMGenericTextConverter identifier changes between processes for set-valued template parametersEvtl. vergeben @samrudhi03 hat das vor 1 Tag übernommen. OffenBug: triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
microsoft/PyRIT#3841 · 1 Kommentar · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 2 Tagen
-
BUG: SelfAskGeneral scorers leave their output keys out of the identifierEvtl. vergeben @Hrushikesh-ramilla hat das vor 2 Tagen übernommen. OffenBug: triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 2 Tagen
Alle Issues in microsoft/PyRIT
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
huggingface/deep-rl-class#723 ·
-
[tool] bug: Qwen3 XML tool parser raises on `...` argument values (Ellipsis is not JSON serializable)Evtl. vergeben @super-yuki hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 87/100
verl-project/verl#8559 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
TencentCloud/octop-harness#228 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
google/osv-scalibr#2585 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
NousResearch/hermes-agent#149323 ·
Maintainer antworten meist innerhalb von 1 Tag