crownyc 셀DB.한선 다형성 패치 — PC 291 OOB 무한루프 근본 해결
개요
Enterprise 한선씨 서버가 데모데이터() 초기화 시 PC 291에서 "배열 범위 초과" 무한 루프로 무응답되던 문제를 셀DB.한선 다형성 패치 하나로 근본 해결. crownyc VM에는 oob_count 100회 안전장치를 영구화해서 동일류 무한 루프 재발을 차단.
무엇을 했는지
1. crownyc VM 무한루프 차단 (이전 세션 마무리)
crownyc.c:5267-5274— INDEX opcode(407)의 배열범위초과 처리에 정적 카운터oob_count추가- 100회 누적 시
exit(1)— 무한 로그 폭주(이전: 9천만 줄) 방지 - 검증: 1000회 OOB 시도 → 100회에서 정확히 차단, 0초
2. 셀DB.한선 다형성 패치 (근본 원인 수정)
- 파일:
/Users/ef/CrownyOS/crownyc/libs/셀DB.한선 행수(테이블): 첫 원소 타입이 "array"(맵 객체)면 단순길이(테이블)반환집계(테이블, 종류, 컬럼): 첫 원소가 "array"면 행맵 배열 전용 경로(맵꺼내로 직접 키 접근). 평면 테이블 경로는 그대로 유지- 호환성: 호출자 60+ 곳 무수정 (영업/재무/공급망/인사/프로젝트/생산/포네/워크플로우/조직/서버 등)
3. PC 291 원인 추적 과정 (재발 방지용 기록)
_컬럼찾기(테이블, 컬럼)이 행맵 배열을 받으면원소(테이블, 0)(=맵)을 N으로 오인 → 큰 정수 캐스팅반복문 i 부터 0 까지 N→ 길이 1 배열에 인덱스 1, 2, 3... 누적 접근 → OOB 무한루프- 발화 패턴:
집계(조회(_X, "k", "==", v), "SUM", "c")— 영업.한선 line 112가 데모 첫 트리거 - 추적은 데모데이터() 함수 본문에 라인별 출력값 마커 삽입 → 정확히
파이프라인진행()진입 직후 PC 291 확정
격리 검증 결과
격리 환경 /tmp/ent-test + 포트 19701에서 운영 코드(디버그 마커 0개) 구동:
- 서버 생존, err.log 0 (런타임 에러 없음)
/health200,/api/status200,/api/finance200,/api/scm200,/api/hrm200,/api/crm200,/api/dashboard200 (1337 bytes, 12개 모듈 전체)- 운영 데이터 디렉토리
/Users/ef/crowny-enterprise/data/안 건드림 (4월 10일자 보존)
관련 파일
/Users/ef/CrownyOS/crownyc/crownyc.c— VM oob_count 차단 (라인 5267-5274)/Users/ef/CrownyOS/crownyc/libs/셀DB.한선— 행수/집계 다형성 (라인 73-86, 256-)/Users/ef/CrownyOS/crownyc/libs/셀DB.한선.bak.*— 패치 전 원본 백업/Users/ef/crowny-enterprise/서버.한선— 변경 없음, 다형성 효과만 받음/Users/ef/crowny-enterprise/modules/{영업,인사,공급망,재무,프로젝트,생산,포네,워크플로우}.한선— 60+집계(조회())호출처가 추가 수정 없이 동작
잔여 이슈
- ABTI 측 server.js 패턴 점검 (별도 작업 창에서 동일류 패턴 있는지)
- 셀DB.한선 단위 테스트 추가 (행맵 배열 vs 평면 테이블 회귀 방지)
- 운영 9701 포트 한선씨 단독 가동 전환 (현재 node proxy → 한선씨 서버 직접 가동 가능)
학습 포인트 (knowledge 등록 대상)
- 셀DB 행맵 배열은
타입(원소(.,0)) == "array"로 평면 테이블과 구분 가능 - 한선씨 맵 객체는 vector 컨텍스트에서 "array" 타입으로 노출됨 (정수가 아님)
_컬럼찾기()같은 평면 테이블 전용 함수에 행맵 배열을 넘기면 N이 맵→큰정수로 OOB 무한루프- crownyc VM은 OOB 즉시중단 안 함(로그 후 계속) → oob_count로 누적 한도 필요