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

Index worker segfaults on PlantUML edge messages: dg_puml_operand leaves *id uninitialized

Ouverte Adaptée aux débutants
#2,818 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 2 jours

@nefayran y travaille déjà.

Depuis le 29/10/2026.

  • #2827 par @nefayran — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
70/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
c
Domaine
tooling

Piste de recherche

Commence dans internal/cbm/diagram.c à dg_puml_operand (ligne 1229), où *label est défini mais *id n'est écrit que sur les chemins de succès ; vérifie les dg_str_t lid/rid non initialisés des appelants de relation (lignes 1310, 1343) et les appelants de dg_puml_decl (1430, 1435). Exécute le script de reproduction et codebase-memory-mcp cli index_repository pour confirmer que skipped_count vaut 1 avant le changement et 0 après. Terminé signifie que Alice ->: x, Alice <-: x et [-> Alice: x s'indexent tous sans quarantaine, y compris la variante !include.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

bug editor/integration stability/performance
Version

0.12.1 (Nix flake build of 8530c8cd1c1ac8e1e3d2962bc213a8c9025fea0a, --version prints dev)

Platform

Linux (x64)

Install channel

Built from source

Binary variant

standard

What happened, and what did you expect?

Written with Claude Code (AI agent) on my behalf.

The index worker segfaults on a PlantUML sequence message to or from the diagram edge (A ->: x, A <-: x, [-> A: x), and the file is quarantined. Expected: the file indexes, and the edge message is skipped or kept as a message without a participant.

Cause, from internal/cbm/diagram.c (unchanged between 8530c8cd and main at 83109dde):

  • dg_puml_operand (line 1229) sets *label up front but *id only on its success paths. In the opener branch ([, (, :, "), an unmatched closer hits if (!c) { return i; } (line 1242) and leaves *id unwritten.
  • dg_puml_relation declares dg_str_t lid; (line 1310) and dg_str_t rid; (line 1343) without initializers, so if (!lid.n) / if (!rid.n) test stack garbage, and the garbage reaches dg_element -> dg_trim.
  • Alice ->: x: the right operand starts at : with no second :. [-> Alice: x: the left operand starts at [ with no ].

Since this is an uninitialized read, whether a file crashes depends on what earlier lines left on the stack. In my build the !include line is what makes it crash: the same file without it indexes cleanly. dg_puml_decl (lines 1430, 1435) calls the same helper with uninitialized id / aid. I have not reproduced a crash through that path.

Possible fix: initialize *id = dg_s(NULL, 0); next to *label at the top of dg_puml_operand. The relation callers then take their existing !lid.n / !rid.n early returns. I have not built or tested this patch.

Impact: on a large repo with many such diagrams, each crash restarts the full index through the daemon recovery loop. Suspect attribution quarantined unrelated files (.sql, .md, .go) before it reached the diagram, and with auto_watch on, every git change starts the loop again. Workaround: *.puml in .cbmignore.

Reproduction
  1. Code (dummy snippet):
mkdir repro && cd repro && git init -q
printf '@startuml\nparticipant Alice\n@enduml\n' > header.puml
printf '@startuml\n!include header.puml\nAlice ->: x\n@enduml\n' > repro.puml
git add . && git commit -qm init
  1. Command: codebase-memory-mcp cli index_repository "{\"repo_path\":\"$PWD\"}"
  2. Result: "skipped_count":1, and repro.puml is reported as quarantined after crash. Alice <-: x and [-> Alice: x in place of Alice ->: x crash the same way. Expected: "skipped_count":0.
Logs
Backtrace from the worker core dump (release build, no debug info):

Program terminated with signal SIGSEGV, Segmentation fault.
#0  dg_trim ()
#1  dg_element ()
#2  dg_puml_relation.isra ()
#3  dg_build ()
#4  cbm_extract_diagram_file ()
#5  cbm_extract_file_ex_with_tests ()
#6  cbm_pipeline_pass_definitions ()
#7  run_sequential_pipeline ()
#8  cbm_pipeline_run_staged ()
#9  cbm_pipeline_run ()
#10 handle_index_repository ()
Diagnostics trajectory (memory / performance / leak issues)

Project scale (if relevant)

No response

Confirmations
  • I searched existing issues and this is not a duplicate.
  • My reproduction uses shareable code (a dummy snippet or a public OSS repository), not proprietary code.
Langage dominant
C
Étoiles
45.8k
Forks
3.8k
Merge moyen
3 j 16 h
PR mergées (30 j)
203

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

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 DeusData/codebase-memory-mcp

Toutes les issues de DeusData/codebase-memory-mcp

Issues similaires

Plus d'issues C

Recevez les nouvelles issues par e-mail

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