Index worker segfaults on PlantUML edge messages: dg_puml_operand leaves *id uninitialized
Les mainteneurs répondent en général sous 2 jours
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 70/100
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
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*labelup front but*idonly on its success paths. In the opener branch ([,(,:,"), an unmatched closer hitsif (!c) { return i; }(line 1242) and leaves*idunwritten.dg_puml_relationdeclaresdg_str_t lid;(line 1310) anddg_str_t rid;(line 1343) without initializers, soif (!lid.n)/if (!rid.n)test stack garbage, and the garbage reachesdg_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
- 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
- Command:
codebase-memory-mcp cli index_repository "{\"repo_path\":\"$PWD\"}" - Result:
"skipped_count":1, andrepro.pumlis reported asquarantined after crash.Alice <-: xand[-> Alice: xin place ofAlice ->: xcrash 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
- 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 DeusData/codebase-memory-mcp
-
editor/integration parsing/quality
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
DeusData/codebase-memory-mcp#2286 ·
Les mainteneurs répondent en général sous 2 jours
-
install writes an unsupported `args` key into the Claude Code SubagentStart hook, so it never runsOuvertebug editor/integration priority/high stability/performance ux/behavior
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
DeusData/codebase-memory-mcp#2239 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
-
bug priority/high ux/behavior
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
DeusData/codebase-memory-mcp#2232 · 2 commentaires ·
Les mainteneurs répondent en général sous 2 jours
-
documentation editor/integration parsing/quality priority/normal
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
DeusData/codebase-memory-mcp#2169 ·
Les mainteneurs répondent en général sous 2 jours
-
documentation priority/normal ux/behavior
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
DeusData/codebase-memory-mcp#2050 ·
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de DeusData/codebase-memory-mcp
Issues similaires
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
InukaAsith/TwinDesk#84 ·
Les mainteneurs répondent en général sous 2 jours
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
CanadaHonk/porffor#426 ·