← 목록

crownyc VM 입력() opcode 근본 수정 + 회원관리 라이브러리

개요

crownyc VM의 입력() 프리미티브가 scanf("%ld")숫자만 받도록 구현되어 있어, 모든 대화형 한선씨 프로그램이 동작 불가였음. 문자열 한 줄 입력 + 다중 호출 안전 구현으로 근본 수정. 회원관리 라이브러리 및 터미널 CLI도 병행 작성.

무엇을 했는지

1. VM 입력() opcode 근본 수정 (핵심)

이전 (crownyc.c:4561-4563):

ccase 325: /* INPUT — 숫자 입력 */
    { long v; if (scanf("%ld", &v) == 1) push(int_to_cube(v)); }
    break;

이후 (crownyc.c:4561-4571):

ccase 325: /* INPUT — 한 줄 문자열 입력 (EOF/실패 시 빈 문자열) */
    { char buf[4096];
      if (fgets(buf, sizeof(buf), stdin)) {
          int len = (int)strlen(buf);
          while (len > 0 && (buf[len-1]=='\n' || buf[len-1]=='\r')) buf[--len] = 0;
          push(int_to_cube(str_new(buf, len)));
      } else push(int_to_cube(str_new("", 0)));
    }
    break;

영향 범위: 모든 대화형 한선씨 프로그램 해금 (REPL/CLI/인증/서버 등 24개 표준 라이브러리 전체)

검증:

2. 회원관리 라이브러리

파일: libs/회원관리.한선

기능:

반환값 맵 통일 (회원등록):

3. 회원터미널 CLI

파일: libs/회원터미널.한선

11개 메뉴 대화형 CLI. 모든 입력() 호출을 문자열변환(입력()) 로 래핑 (24곳).

관련 파일 경로

잔여 이슈 (다음 세션 태스크)

태스크 1: 회원관리.한선 반환값 전면 맵 통일

규모: 큼 (20+ 함수) 대상: 서비스계정등록/로그인/지갑이체/뱅크관리/스탁배정/DEX활성화 등 여전히 배열 반환 중 영향: 터미널이 맵꺼내로 접근하므로 타입 불일치 시 VM 메모리 범위 에러 유발

태스크 2: 회원등록 → 인증 파이프라인 디버깅

증상: [3진VM] 메모리 범위 벗어남: -240 두 차례 발생 (인증 시도 중) 원인 추정: 등록 시 _회원데이터저장() 과 재로드 간 셀ID 직렬화/역직렬화 불일치. 숫자변환(셀ID문자) 결과가 음수로 튀면서 셀읽(_셀넷, 음수ID, 슬롯) 이 음수 메모리 주소 접근 VM 복구 상태: crownyc.c:1485에서 경고만 내고 0큐브 반환 — 크래시 없음

태스크 3: 감사로그 출력 포맷

증상: 감사로그 조회 시 [20103, 0, 20104, 0, ...] str_handle 원문 노출 해결: 터미널의 감사로그 출력에서 핸들 → 실제 문자열 변환 + 시간/회원/행동/상세 필드로 테이블 포맷팅

태스크 4: VM 타입 미스매치 가드 강화

대상: 셀읽, 맵꺼내, 숫자변환 등에서 잘못된 타입/범위 입력에 대한 사전 검증 현재: 메모리 경계만 체크. 셀 ID/맵 키 음수에 대한 사전 거부 없음