Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

BUG: ManyShotJailbreakAttack accepts a negative example_count and drops examples from the end

Fermée
#3,393 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 2 jours

@ShivamSharma43 y travaille déjà.

Depuis le 20/10/2026.

  • #3395 par @ShivamSharma43 — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
35/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
À l'abandon
Stack technique
python
Domaine
security, testing-qa

Piste de recherche

Start at ManyShotJailbreakAttack.validate_constructor_parameters and the construction path described in the issue; check how the REST TechniqueService.create_async path uses that validation. Add coverage for non-positive, boolean, and non-integer example_count values at construction and validation, then confirm invalid values raise a ValueError naming example_count. An open linked pull request (#3395) indicates work is already underway.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Describe the bug

ManyShotJailbreakAttack uses example_count as a slice bound (examples[:example_count]), but validate_constructor_parameters only rejects 0. A negative count is accepted and silently drops examples from the end of the list instead of selecting from the start, so example_count=-1 with the bundled dataset sends 399 examples, and with five custom examples -1 keeps four and -4 keeps one. True is accepted as 1, and non-integers fail with an unrelated error (2.5 raises TypeError: slice indices must be integers..., -5 with five examples raises the misleading Many shot examples must be provided.).

Because the check sits in validate_constructor_parameters, the REST technique API (TechniqueService.create_async) also accepts {"example_count": -1} and stores a technique that later runs with the wrong number of examples. The neighbouring bounds in that API (max_attempts_on_failure, max_turns, tree_depth, chunk_size, ...) are all rejected up front.

Steps/Code to Reproduce
import asyncio
from unittest.mock import MagicMock

from pyrit.executor.attack import ManyShotJailbreakAttack
from pyrit.prompt_target import PromptTarget
from pyrit.setup import IN_MEMORY, initialize_pyrit_async

asyncio.run(initialize_pyrit_async(memory_db_type=IN_MEMORY))

target = MagicMock(spec=PromptTarget)
examples = [{"user": f"q{i}", "assistant": f"a{i}"} for i in range(5)]

for count in (-1, -4, True):
    attack = ManyShotJailbreakAttack(objective_target=target, example_count=count, many_shot_examples=examples)
    print(count, len(attack._examples))

print(len(ManyShotJailbreakAttack(objective_target=target, example_count=-1)._examples))
Expected Results

example_count values that are not positive integers raise a ValueError naming example_count, both at construction and in validate_constructor_parameters.

Actual Results
-1 4
-4 1
True 1
399
Screenshots

N/A

Versions
  • OS: Windows 11
  • Python version: 3.11.9
  • PyRIT version: installed from main (1979257a) in editable mode
Langage dominant
Python
Étoiles
4.6k
Forks
962
Merge moyen
2 j 13 h
PR mergées (30 j)
423

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

  • Aucun Dockerfile ni fichier Docker Compose
  • Propose un modèle de pull request
  • Aucun guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de microsoft/PyRIT

Toutes les issues de microsoft/PyRIT

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.