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

Bug: aliases & nested keys unexpected behavior

Ouverte
#714 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
35/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
ruby
Domaine
tooling

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

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 ruby/psych

Toutes les issues de ruby/psych

Issues similaires

Plus d'issues Ruby

Recevez les nouvelles issues par e-mail

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