firestore: field path with a quoted name ending in a backslash is misparsed
Les mainteneurs répondent en général sous 1 jour
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 78/100
Piste de recherche
Commencez par google/cloud/firestore_v1/field_path.py et examinez le motif de jeton QUOTED utilisé par FieldPath.from_api_repr() ; reproduisez l’échec avec l’exemple FieldPath fourni. Vérifiez les tests de l’analyseur de chemins de champs et ajoutez une couverture pour un segment entre guillemets se terminant par une barre oblique inverse, suivi d’un autre segment. La tâche est terminée lorsque la représentation de l’API est analysée à nouveau en retrouvant les parties d’origine et que la mise à jour cible le champ imbriqué décrit dans l’issue.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Package: google-cloud-firestore (google/cloud/firestore_v1/field_path.py), current main.
What happens
FieldPath.to_api_repr() escapes a trailing backslash correctly, but the parser cannot read the result back when another quoted segment follows it. FieldPath.from_api_repr() raises ValueError, and FieldPath.from_string() catches that error and falls back to a plain split on ., so it silently returns parts that still contain the backticks and escape characters.
Because update() and set(..., merge=[...]) go through FieldPath.from_string() / parse_field_path(), the write goes to the wrong field.
Minimal repro
from google.cloud.firestore_v1.field_path import FieldPath
from google.cloud.firestore_v1 import _helpers
s = FieldPath("dir\\", "file name").to_api_repr()
print(s) # `dir\\`.`file name`
print(FieldPath.from_string(s).parts) # ('`dir\\\\`', '`file name`')
FieldPath.from_api_repr(s) # ValueError: Invalid path
pbs = _helpers.pbs_for_update("projects/p/databases/d/documents/c/doc", {s: 1}, None)
print(list(pbs[0].update.fields)) # ['`dir\\\\`']
What should happen
The string produced by to_api_repr() should parse back to the same parts, ('dir\\', 'file name'), and the update should target dir\ > file name.
Root cause
The QUOTED token pattern is r"`(?:\\`|[^`])*?`". In `dir\\`.`file name` the lazy match takes the second backslash together with the closing backtick as an escaped backtick (\`), so the token runs on to the next backtick and swallows `.`. What remains (file name`) does not tokenize, so parsing fails. The pattern needs to treat a backslash as an escape for the next character, not only for a backtick, and should not let a bare backslash match on its own.
- Langage dominant
- Python
- Étoiles
- 5.4k
- Forks
- 1.8k
- Merge moyen
- 2 j 1 h
- PR mergées (30 j)
- 191
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le 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 googleapis/google-cloud-python
-
api: spanner type: feature request
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
googleapis/google-cloud-python#18584 ·
Les mainteneurs répondent en général sous 1 jour
-
auth: call_client_cert_callback() discards passphrase for encrypted keysPeut-être pris @kwy404 l’a pris il y a 18 jours. Ouverte
Difficulté 1/5 1-3 heures Accessibilité débutants 92/100
googleapis/google-cloud-python#18467 ·
Les mainteneurs répondent en général sous 1 jour
-
auth: `impersonated_credentials` loses `subject` on copy, so `with_scopes()` and `with_quota_project()` turn off domain wide delegationPeut-être pris @Om-singhaI l’a pris il y a 30 jours. Ouverteauth priority: p2 type: bug
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
googleapis/google-cloud-python#18428 ·
Les mainteneurs répondent en général sous 1 jour
-
priority: p2 type: bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
googleapis/google-cloud-python#18375 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
ci: enable --strict flag in presubmit twine_checkPeut-être pris @ohmayr l’a pris il y a 19 jours. Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 76/100
googleapis/google-cloud-python#18339 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de googleapis/google-cloud-python
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
mihai-vlc/sublime-jsfmt#56 ·
-
comp/cli comp/plugins P2 type/bug
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
NousResearch/hermes-agent#141917 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Go device SDK: Whisper transcriber keeps buffering and transcribing audio appended after Stop()Peut-être pris @apoorvdarshan l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
BasedHardware/omi#22770 ·
Les mainteneurs répondent en général sous 1 jour
-
bug needs-acceptance wg/router-models-inference-runtime
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
vllm-project/semantic-router#5295 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
huggingface/huggingface_hub#5210 ·
Les mainteneurs répondent en général sous 1 jour