BUG: AzureBlobStorageTarget returns a URL with // when the container URL ends with a slash
Les mainteneurs répondent en général sous 2 jours
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 82/100
Piste de recherche
Lisez AzureBlobStorageTarget._send_prompt_to_target_async et _parse_url, que l’issue identifie comme les points de construction de l’URL et d’analyse du téléversement. Reproduisez le problème avec les cas fournis pour une URL de conteneur se terminant par / et une URL avec un préfixe de dossier. Le travail est terminé lorsque les noms des blobs téléversés et les URL renvoyées correspondent aux résultats attendus, sans double barre oblique.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Describe the bug
AzureBlobStorageTarget._send_prompt_to_target_async builds the returned URL by appending to the configured container URL:
blob_url = self._container_url + "/" + file_name
When container_url (or AZURE_STORAGE_ACCOUNT_CONTAINER_URL) ends with /, for example https://acct.blob.core.windows.net/xpia/, the URL gets // before the file name. The upload goes through _parse_url, which ignores the empty segment, so the blob is uploaded as doc.txt. The returned URL .../xpia//doc.txt names a blob /doc.txt, which does not exist, so anything that uses the returned URL (for example the XPIA workflows) points at a missing blob.
With a folder prefix and a trailing slash (.../xpia/folder/), _parse_url returns the prefix folder/, so the blob itself is uploaded as folder//doc.txt instead of folder/doc.txt.
Steps/Code to Reproduce
import asyncio
from unittest.mock import AsyncMock, MagicMock, patch
from pyrit.setup import IN_MEMORY, initialize_pyrit_async
async def main():
await initialize_pyrit_async(memory_db_type=IN_MEMORY)
from pyrit.models import Message, MessagePiece
from pyrit.prompt_target import AzureBlobStorageTarget
for container_url in ["https://acct.blob.core.windows.net/xpia/", "https://acct.blob.core.windows.net/xpia/folder/"]:
target = AzureBlobStorageTarget(container_url=container_url, sas_token="sv=test")
client = AsyncMock()
client.get_blob_client = MagicMock(return_value=AsyncMock(exists=AsyncMock(return_value=False)))
piece = MessagePiece(role="user", original_value="payload", prompt_metadata={"file_name": "doc.txt"})
with patch("azure.storage.blob.aio.ContainerClient.from_container_url", return_value=client):
response = await target.send_prompt_async(message=Message(message_pieces=[piece]))
print("container_url:", container_url)
print(" uploaded blob:", client.get_blob_client.call_args.kwargs["blob"])
print(" returned URL :", response[0].get_value())
asyncio.run(main())
Expected Results
The trailing slash makes no difference:
container_url: https://acct.blob.core.windows.net/xpia/
uploaded blob: doc.txt
returned URL : https://acct.blob.core.windows.net/xpia/doc.txt
container_url: https://acct.blob.core.windows.net/xpia/folder/
uploaded blob: folder/doc.txt
returned URL : https://acct.blob.core.windows.net/xpia/folder/doc.txt
Actual Results
The returned URL does not match the uploaded blob, and the prefixed blob gets an empty path segment:
container_url: https://acct.blob.core.windows.net/xpia/
uploaded blob: doc.txt
returned URL : https://acct.blob.core.windows.net/xpia//doc.txt
container_url: https://acct.blob.core.windows.net/xpia/folder/
uploaded blob: folder//doc.txt
returned URL : https://acct.blob.core.windows.net/xpia/folder//doc.txt
Screenshots
N/A
Versions
- OS: Windows 11
- Python version: 3.11.9
- PyRIT version: installed from main (eeb9ba9d) in editable mode
- Langage dominant
- Python
- Étoiles
- 4.7k
- Forks
- 1k
- Merge moyen
- 2 j 3 h
- PR mergées (30 j)
- 465
Préparer son environnement
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
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de microsoft/PyRIT
-
Scenario objective previews can split supplementary Unicode during truncationPeut-être pris @Aadithya-kl l’a pris aujourd’hui. OuverteBug: triage help wanted
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
microsoft/PyRIT#3870 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
-
URLDataTypeSerializer treats mixed-case HTTP(S) schemes as local pathsPeut-être pris @akhil9tiet l’a pris aujourd’hui. OuverteBug: triage help wanted
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
microsoft/PyRIT#3861 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
-
Parameter required status is lost after wire round-tripPeut-être pris @its-amann l’a pris aujourd’hui. OuverteBug: triage help wanted
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
microsoft/PyRIT#3854 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
-
BUG: LLMGenericTextConverter identifier changes between processes for set-valued template parametersPeut-être pris @samrudhi03 l’a pris aujourd’hui. OuverteBug: triage
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
microsoft/PyRIT#3841 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
-
BUG: SelfAskGeneral scorers leave their output keys out of the identifierPeut-être pris @Hrushikesh-ramilla l’a pris il y a 1 jour. OuverteBug: triage
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de microsoft/PyRIT
Issues similaires
-
needs-area-label
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
Les mainteneurs répondent en général sous 2 jours
-
enhancement good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
Official-Space-AI/OpenPhysGraspGen#114 ·
Les mainteneurs répondent en général sous 2 jours
-
changelog investigate
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
ramnes/notion-sdk-py#441 ·
-
qa_bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
NVIDIA-NeMo/Gym#5644 ·
Les mainteneurs répondent en général sous 2 jours
-
BUG: catalog database credentials printed to logs at startupPeut-être pris @cjboyle l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
Les mainteneurs répondent en général sous 1 jour