Bug: aliases & nested keys unexpected behavior
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 35/100
Piste de recherche
Exécutez la reproduction fournie de YAML.load avec les alias activés, puis suivez la manière dont Psych représente les hashes imbriqués comportant des alias. Comparez le partage d’objets observé avec la sémantique des alias YAML ; le travail est terminé lorsque le comportement est soit corrigé avec une couverture de régression, soit clairement documenté s’il est intentionnel.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Description
Today I encountered a rather weird bug in my project, and tracked it down to how YAML handles nested keys with aliases. I noticed how changing a specific key in a Hash from YAML.load(_file) would change multiple values instead.
Given that the YAML.load(_file) method returns a Hash, changing one specific key of that Hash should not change any other key. Or at least that is the behavior I'm expecting. I couldn't find any documentation regarding this odd behavior.
I have only observed this odd behavior with nested keys, not 'normal' keys as demonstrated below.
Steps to reproduce
require 'yaml'
yaml = <<YAML
alias: &alias
normal_value: 404
nested:
value: 404
some_key:
<<: *alias
another_key:
<<: *alias
YAML
content = YAML.load(yaml, aliases: true, symbolize_names: true)
puts "========== BEFORE =========="
pp content
content[:alias][:normal_value] = 999
content[:alias][:nested][:value] = 999
puts "========== AFTER =========="
pp content
When running this script, I'm getting the following output:
========== BEFORE ==========
{alias: {normal_value: 404, nested: {value: 404}}, some_key: {normal_value: 404, nested: {value: 404}}, another_key: {normal_value: 404, nested: {value: 404}}}
========== AFTER ==========
{alias: {normal_value: 999, nested: {value: 999}}, some_key: {normal_value: 404, nested: {value: 999}}, another_key: {normal_value: 404, nested: {value: 999}}}
Notice how the nested value is modified in both some_key and another_key, while the normal value is not.
Machine details
- Apple M3 Macbook Air
- Reproduced on: "ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin24]", "ruby 3.4.0dev (2024-12-25 master f450108330) +PRISM [arm64-darwin24]"
- Langage dominant
- Ruby
- Étoiles
- 597
- Forks
- 223
- Merge moyen
- 6 h 8 min
- PR mergées (30 j)
- 2
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun 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 ruby/psych
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Documentation
Difficulté 1/5 Moins d'une heure Accessibilité débutants 72/100
-
Psych.dump raises Encoding::CompatibilityError for UTF-16/UTF-32 stringsPeut-être pris @Halvanhelv l’a pris il y a 28 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 55/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 68/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 52/100
Toutes les issues de ruby/psych
Issues similaires
-
[KLayout][DRC] Gat.b1 only checks gate regions, misses facing 3.3 V poly end caps (Figure 5.6)Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
IHP-GmbH/IHP-Open-PDK#1266 ·
Les mainteneurs répondent en général sous 2 jours
-
Add ZammadPeut-être pris @Arslan-TR l’a pris aujourd’hui. Ouverterequest
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
endoflife-date/endoflife.date#11298 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
performance v/6
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
WITCodingClub/calendar-backend#689 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 1/5 Moins d'une heure Accessibilité débutants 86/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
rubys/roundhouse#571 ·
Les mainteneurs répondent en général sous 1 jour