Skip to content

SIGSEGV: cc with a ~290-char argument crashes perry-compiled cc (rc=-11, nondeterministic 2/3 reps) — regression window includes today's merge trains #9552

Description

@proggeramlug

Full-suite verification on main 3b9c9dee2c (binary /root/claude-roots/app_verify): stress case C08_long_arg — -p with a ~290-char xxxx… argument — segfaults where node exits 1 (the normal not-logged-in path).

node rc=[1] | perry rc=[-11]     NONDETERMINISTIC-PERRY-ONLY (2 signatures)

Nondeterministic across reps (2 of 3 signatures differ) — consistent with a GC-timing-dependent stale pointer or an overflow whose reachability depends on allocation state.

Why this looks like a fresh regression

This case passed in the previous full sweep (main+#9479, ~12h earlier, 167/196 run — C08 was not in its failure list). The window between the two runs contains today's merge trains: #9518 (stream read path — stdin/argv-adjacent), #9519, #9521 (error stacks — a long-arg error message flows through error rendering), #9522, #9540, #9544, and the worker PRs (#9531–#9538 range). A long -p argument produces a long prompt string that flows into the auth-error path and the transcript writer.

Triage plan

  1. Reproduce standalone: HOME=<fresh> app_verify -p $(python3 -c "print('x'*290)") ×5; then bisect length (256/288/512/1024 — a boundary at 256 or around a header size would be telling).
  2. PERRY_GC_PROTECT_FROMSPACE=1 — if it faults on a retired address, it is the rooting class; the cc auth-error path: Cannot read properties of undefined (reading 'def') where node reports Not logged in #9417 ladder applies.
  3. If GC-clean: core dump + symbolize.py (/root/claude-9417/), and A/B against app_9485/app_final (pre-train binaries, both still on the box) to pin the introducing train.

Binaries for A/B: /root/claude-roots/app_verify (crashing, main tip), app_final (main+#9479, passing this case), app_9485, app_9499. Case runner: cd /root/claude-ccstress && PERRY_BIN=… python3 harness.py cases_all.jsonl C08_long_arg.

Found by the post-merge full verification sweep; the only new failure in it.

Activity

  1. added 5 commits that reference this issue on Sep 2, 2026
  2. proggeramlug commented on Sep 2, 2026

    @proggeramlug
    ContributorAuthor

    Closing: fixed in #9565 (pin cross-thread promises in their constructor until they settle), landed via merge train #9569 on 2026-09-02; the fixture that fails unfixed landed via #9571 in train #9573. Not in release candidate r27 — the refreshed candidate must include it.

  3. proggeramlug commented on Sep 2, 2026

    @proggeramlug
    ContributorAuthor

    Post-merge verification at main 8d27f7b964: fresh toolchain + cc rebuild, the exact case hammered 15× with fresh HOME each run — 0/15 bad, all rc=1 matching node. Extra rigor on purpose: at ed99c35cd the crash was still live at 1-in-3 reps, hidden behind the comparator's representative pair and visible only as NONDETERMINISTIC-PERRY-ONLY — one clean run was demonstrably not evidence for this bug.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions