Reading a deleted namespace scalar recreates its stash entry
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 57/100
Piste de recherche
Start with RuntimeStash.deleteNamespace and the stash enumeration path in HashSpecialVariable, then inspect t/basic.t and the standalone reproduction described in the issue. Trace how a qualified undefined scalar is handled after its namespace is deleted. Done means the child namespace remains absent after the scalar read, matching Perl's behavior on both PerlOnJava backends.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Summary
Deleting a package namespace from its parent stash does not keep that namespace deleted after a qualified scalar is read. This makes Text::Template 1.61's _scrubpkg cleanup assertion fail in t/basic.t on both PerlOnJava backends. System Perl passes the assertion, and the complete upstream suite passes there (22 files, 184 tests). The failure is included in archived CPAN run 20261104-151051-20617.
Root cause
RuntimeStash.deleteNamespace removes the namespace's current slots and marks the package freed. But stash enumeration in HashSpecialVariable reconstructs child-package entries from any qualified global slot it finds. A later read such as $Cleanup::GEN0::test creates an undefined scalar slot; enumeration then infers GEN0:: as a live child stash from that slot and exposes it again. The enumeration path does not honor the freed-stash marker, so this implicit scalar autovivification makes exists $Cleanup::{"GEN0::"} true again. The standalone script in the comment reproduces the behavior without a CPAN dependency.
Expected behavior
Reading an undefined scalar below a namespace deleted from its parent stash must not recreate that child namespace entry. Perl leaves the child absent in the same sequence.
- Langage dominant
- Perl
- Étoiles
- 65
- Forks
- 8
- Merge moyen
- 5 h 45 min
- PR mergées (30 j)
- 184
Préparer son environnement
- Fournit un Dockerfile ou un 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 fglock/PerlOnJava
-
area:runtime documentation enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
fglock/PerlOnJava#1579 ·
Les mainteneurs répondent en général sous 1 jour
-
area:backend bug
Difficulté 4/5 3-5 jours Accessibilité débutants 55/100
fglock/PerlOnJava#1981 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
area:parser bug
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
fglock/PerlOnJava#1979 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
area:cpan-port bug
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
fglock/PerlOnJava#1962 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 52/100
fglock/PerlOnJava#1961 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de fglock/PerlOnJava
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
-
ai-driven-fuzzing bug claude Minor
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
linagora/lemonldap-ng-plugins#170 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
libwww-perl/HTTP-Message#236 ·
-
1.severity: security
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Les mainteneurs répondent en général sous 1 jour
-
wave-followup
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100