VM 치명 버그 4군 패치 (ISA729 울트라감사 후속)
개요
2026-07-09 ISA729 924-opcode 울트라 감사(docs/isa729-감사-20260709/최종판정.md)에서
소스라인 단위로 확정된 치명 VM 버그 4군을 crownyc.c/hanseonc_high.c에 패치했다.
전부 재현(전) → 최소 diff 패치 → 임시빌드 검증 → mv 교체 → pkg 동기화 프로토콜을 따랐다.
무엇을 했는지
- op143 ZIPWITH: 콜백 실행 자리에서
exec_opcode(1)(=HALT)을 오호출해 함수가
rpush+pc점프 후 RET까지 자체
페치-실행 루프를 도는 정규 CALL 경로로 교체(스텝상한+pc가드로 폭주 방지).
- op469 TPOOL:
break;누락으로 case 470(HDL_FORCE)에 폴스루 → 반환값이
break; 추가. 인접 케이스 전수
폴스루 스캔(자동화 스크립트) 완료, 추가 결함 없음 확인.
- PC탈취군(521/533/540/544/557 + JMP/SPAWN/LAZY_INIT/MONAD/FUNCTOR/APPLICATIVE 등
pc>=0을 검사하지 않아 음수 점프 시 크래시. 개별
opcode가 아니라 execute()의 두 실행루프(FAST/LEGACY) 공통 커널 1곳을
(unsigned)pc < (unsigned)prog_len로 교체해 근본 차단(핫루프 분기비용 무추가).
- op931 QT_SYMP 비결정 크래시: 원 감사는 "힙 초기화 누락"으로 추정했으나,
--trace로 재추적한 결과 진짜 원인은 다른 곳이었음을 확정 —
hanseonc_high.c의 __내장__ 원시 이스케이프가 opcode≥729(ISA729 확장, 217개)를
opcode_to_cube()에 직접 통과시키는데 이 함수의 섹터 필드가 2트릿(0~8)뿐이라
오버플로 → op931이 실제로는 op445(SPAWN)로 디코딩되어 실행됨(결정론적
앨리어싱). SPAWN이 PC탈취군과 동일한 무검증 pc대입 버그를 가져 크래시가
재현된 것. QT_SYMP 자신의 로직(가드+mem_at() 안전처리)은 이미 안전함을
정상입력 20회 반복(전부 동일결과)으로 확인. 패치는 (a) 위 3)의 메인루프
가드 + (b) __내장__도 언어 키워드 경로와 동일하게 opcode>=729면
DATA(op)+MACRO(727) 안전 디스패치로 우회하도록 수정 — 두 방어선으로
원인을 원천 차단.검증 결과 요약
/Users/ef/CrownyOS/docs/isa729-감사-20260709/패치검증_VM.md.- 기준선:
--version/헬로월드/RPN(3+7=10) 정상,pkg make test11/13
16_셀3축,18_셀DB라이브러리).
- 배포: 정본
crownyc/hanseonc_highmv 교체,pkg/crownyc.c·pkg/hanseonc_high.c
관련 파일
/Users/ef/CrownyOS/crownyc/crownyc.c— case 143(ZIPWITH), case 469(TPOOL),
execute() 메인루프 x2 (FAST/LEGACY) 패치.
/Users/ef/CrownyOS/crownyc/hanseonc_high.c—__내장__핸들러 opcode≥729
/Users/ef/CrownyOS/crownyc/pkg/crownyc.c,pkg/hanseonc_high.c— 동기화본./Users/ef/CrownyOS/docs/isa729-감사-20260709/패치검증_VM.md— 전/후 재현 로그 전문./Users/ef/CrownyOS/docs/isa729-감사-20260709/최종판정.md,적대_규칙.md,적대_안정성.md— 원 감사 근거./Users/ef/CrownyOS/crownyc/vm패치_20260709.한선— 한선씨 동반 문서(패치 로직 요약, 크라우니코드 규칙 준수).
잔여 이슈 (이번 패치 범위 밖, 향후 과제)
- 표준라이브러리
설정()오용(op415 ARRAY_SET 오배선) →tests/run_all.shhang
- op7 STORE 인자순서 footgun, 아리티 오배선 10종+(507/516/548/549/624/632 등),
- 이번 세션에서 남은 6crash(239/426/515/133/653/기타)+2hang(35/136)은