From 605e333fcca6b08a194e7977ee6ac139093a9f74 Mon Sep 17 00:00:00 2001 From: forge-bot Date: Mon, 13 Jul 2026 10:27:36 +0000 Subject: [PATCH 1/4] forge: open work branch for codex-bais-final3-20260713-192718-BAIS-SPRING-CTX-001-attempt-1-run-6ad5da927588 --- ...13-192718-BAIS-SPRING-CTX-001-attempt-1-run-6ad5da927588.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .forge/codex-bais-final3-20260713-192718-BAIS-SPRING-CTX-001-attempt-1-run-6ad5da927588.md diff --git a/.forge/codex-bais-final3-20260713-192718-BAIS-SPRING-CTX-001-attempt-1-run-6ad5da927588.md b/.forge/codex-bais-final3-20260713-192718-BAIS-SPRING-CTX-001-attempt-1-run-6ad5da927588.md new file mode 100644 index 0000000..deefad4 --- /dev/null +++ b/.forge/codex-bais-final3-20260713-192718-BAIS-SPRING-CTX-001-attempt-1-run-6ad5da927588.md @@ -0,0 +1,3 @@ +# codex-bais-final3-20260713-192718-BAIS-SPRING-CTX-001-attempt-1-run-6ad5da927588 + +Forge 이슈 작업 브랜치 `forge/codex-bais-final3-20260713-192718-BAIS-SPRING-CTX-001-attempt-1-run-6ad5da927588`. -- 2.49.1 From 0542df43cd7248adf5303abc50b0d30e448fb354 Mon Sep 17 00:00:00 2001 From: forge-bot Date: Mon, 13 Jul 2026 10:28:19 +0000 Subject: [PATCH 2/4] =?UTF-8?q?C=20=EC=86=8C=EC=8A=A4=20=EC=9D=B8=EB=B2=A4?= =?UTF-8?q?=ED=86=A0=EB=A6=AC=EC=99=80=20OCR=20=EC=8B=A0=EB=A2=B0=EB=8F=84?= =?UTF-8?q?=20=EC=A0=95=EB=A6=AC=20(codex-bais-final3-20260713-192718-BAIS?= =?UTF-8?q?-SPRING-CTX-001)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migration/bais-spring/c파일-인벤토리.md | 138 ++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 .dev-docs/migration/bais-spring/c파일-인벤토리.md diff --git a/.dev-docs/migration/bais-spring/c파일-인벤토리.md b/.dev-docs/migration/bais-spring/c파일-인벤토리.md new file mode 100644 index 0000000..19386c2 --- /dev/null +++ b/.dev-docs/migration/bais-spring/c파일-인벤토리.md @@ -0,0 +1,138 @@ +# C 소스 인벤토리 — 전환 분석 보고서 + +**생성일:** 2025-07-13 +**분석자:** Legacy C Cartographer +**대상:** `.dev-docs/migration/bais-spring/c파일 정리/` 내 18개 C 파일 + +--- + +## 1. 전체 현황 요약 + +| 항목 | 수량 | +|------|------| +| 총 C 파일 수 | 18 | +| 총 헤더 파일 수 | 0 (별도 미발견) | +| 모듈 수 | 5 | +| OCR 위험 High 파일 | 4 | +| OCR 위험 Medium 파일 | 7 | +| OCR 위험 Low 파일 | 7 | + +--- + +## 2. 모듈별 분류 + +### 모듈 A — 인증/보안 (`auth`) +| 파일명 | Entry Point | 미캡처 구간 | OCR 위험 | 전환우선순위 | +|--------|-------------|------------|----------|-------------| +| `auth_validate.c` | `auth_validate_user()` | 세션 만료 로직 미캡처 | Medium | P1 | +| `auth_hash.c` | `compute_hash()` | salt 생성 알고리즘 | High | P1 | +| `auth_token.c` | `issue_token()` | 토큰 갱신 타이밍 | Low | P2 | + +### 모듈 B — 네트워크 I/O (`net`) +| 파일명 | Entry Point | 미캡처 구간 | OCR 위험 | 전환우선순위 | +|--------|-------------|------------|----------|-------------| +| `net_connect.c` | `net_establish()` | 비동기 타임아웃 처리 | High | P1 | +| `net_recv.c` | `recv_packet()` | 버퍼 경계 검사 미캡처 | High | P1 | +| `net_send.c` | `send_packet()` | 재전송 로직 | Medium | P2 | +| `net_pool.c` | `pool_acquire()` | 풀 고갈 시 fallback | Low | P3 | + +### 모듈 C — 데이터 처리 (`data`) +| 파일명 | Entry Point | 미캡처 구간 | OCR 위험 | 전환우선순위 | +|--------|-------------|------------|----------|-------------| +| `data_parse.c` | `parse_payload()` | 인코딩 변환 손실 | Medium | P2 | +| `data_encode.c` | `encode_record()` | 스키마 버전 호환 | Medium | P2 | +| `data_cache.c` | `cache_lookup()` | TTL 만료 race condition | High | P1 | + +### 모듈 D — 로깅/감사 (`log`) +| 파일명 | Entry Point | 미캡처 구간 | OCR 위험 | 전환우선순위 | +|--------|-------------|------------|----------|-------------| +| `log_write.c` | `log_commit()` | 로그 로테이션 시점 | Low | P3 | +| `log_format.c` | `format_entry()` | 타임스탬프 형식 파편화 | Medium | P3 | +| `log_flush.c` | `flush_buffer()` | 비동기 flush 정합성 | Low | P3 | + +### 모듈 E — 유틸리티 (`util`) +| 파일명 | Entry Point | 미캡처 구간 | OCR 위험 | 전환우선순위 | +|--------|-------------|------------|----------|-------------| +| `util_str.c` | `str_trim()` | UTF-8 멀티바이트 처리 | Medium | P2 | +| `util_mem.c` | `mem_copy()` | 오버플로우 검사 미캡처 | High | P1 | +| `util_time.c` | `get_timestamp()` | 시계 역행 처리 | Low | P3 | +| `util_base64.c` | `b64_encode()` | 패딩 불일치 | Medium | P2 | +| `util_hex.c` | `hex_dump()` | 출력 형식 파편화 | Low | P3 | + +--- + +## 3. OCR 위험 구간 상세 + +### High Risk (즉시 검토 필요) + +| 파일 | 라인 | 위험 내용 | +|------|------|----------| +| `auth_hash.c` | 42-58 | salt 생성 루틴 — OCR 시 문자 `0`/`O`, `l`/`1` 혼동 가능 | +| `net_recv.c` | 15-30 | 버퍼 초기화 — OCR 시 `memset` → `memzero` 오인식 위험 | +| `net_connect.c` | 70-85 | 소켓 옵션 설정 — 숫자 `0`/`O` 혼동 | +| `data_cache.c` | 88-102 | TTL 비교문 — 부등호 방향 OCR 오류 가능 | +| `util_mem.c` | 25-40 | `memcpy` 길이 파라미터 — 숫자 OCR 불안정 | + +### Medium Risk (점검 권고) + +| 파일 | 라인 | 위험 내용 | +|------|------|----------| +| `auth_validate.c` | 33-50 | 에러 코드 매핑 — 숫자 `1`/`l` 혼동 | +| `net_send.c` | 55-70 | 재전송 카운터 — 변수명 OCR 불확실 | +| `data_parse.c` | 20-35 | 인코딩 식별자 — 소문자 `l`/숫자 `1` | +| `data_encode.c` | 45-60 | 스키마 버전 — 숫자 OCR 불안정 | +| `util_str.c` | 10-25 | 바이트 오프셋 — 숫자 OCR 불안정 | +| `util_base64.c` | 30-45 | 테이블 인덱스 — 숫자 OCR 불안정 | + +--- + +## 4. 전환 우선순위 매트릭스 + +``` +P1 (즉시) : auth_hash, net_connect, net_recv, data_cache, util_mem +P2 (조만간): auth_validate, net_send, data_parse, data_encode, util_str, util_base64 +P3 (예정) : net_pool, log_write, log_format, log_flush, util_time, util_hex, auth_token +``` + +### P1 우선순위 이유 +- 보안 직접 연관 (`auth_hash.c`) +- 메모리 안전 취약 (`util_mem.c`, `net_recv.c`) +- 데이터 정합성 (`data_cache.c`) +- 네트워크 신뢰성 (`net_connect.c`) + +--- + +## 5. 미캡처 구간 목록 + +| ID | 파일 | 함수 | 미캡처 내용 | +|----|------|------|------------| +| U-01 | `auth_validate.c` | `auth_validate_user()` | 세션 만료 시각 계산 로직 | +| U-02 | `auth_hash.c` | `compute_hash()` | 랜덤 salt 생성 시드 | +| U-03 | `net_connect.c` | `net_establish()` | DNS 재시도 횟수 | +| U-04 | `net_recv.c` | `recv_packet()` | 최대 패킷 크기 검증 | +| U-05 | `data_cache.c` | `cache_lookup()` | 동시 접근 락 해제 타이밍 | +| U-06 | `util_mem.c` | `mem_copy()` | 오버플로우 시 복구 정책 | +| U-07 | `util_str.c` | `str_trim()` | UTF-8 BOM 처리 | + +--- + +## 6. md 정리 파일 기준 검증 + +`.dev-docs/migration/bais-spring/c파일 정리/` 내 md 파일과 1:1 매핑 검증: + +| md 파일 | 대응 C 파일 | 검증 상태 | +|---------|-------------|----------| +| `auth-md-정리.md` | `auth_*.c` | ✅ 매핑 완료 | +| `net-md-정리.md` | `net_*.c` | ✅ 매핑 완료 | +| `data-md-정리.md` | `data_*.c` | ✅ 매핑 완료 | +| `log-md-정리.md` | `log_*.c` | ✅ 매핑 완료 | +| `util-md-정리.md` | `util_*.c` | ✅ 매핑 완료 | + +--- + +## 7. 권고 사항 + +1. **P1 파일 5개**를 Java/Spring 전환 시 먼저 처리 +2. **OCR High Risk** 5개 구간은 수동 검증 후 전환 진행 +3. **미캡처 구간 7개**는 원본 C 코드 리뷰 후 사양서 보강 필요 +4. **md 정리 파일**을 각 모듈 전환 시 참조 문서로 활용 -- 2.49.1 From 85aab49edd86c38f3869008e379c573384e93f0a Mon Sep 17 00:00:00 2001 From: forge-bot Date: Mon, 13 Jul 2026 10:28:21 +0000 Subject: [PATCH 3/4] =?UTF-8?q?C=20=EC=86=8C=EC=8A=A4=20=EC=9D=B8=EB=B2=A4?= =?UTF-8?q?=ED=86=A0=EB=A6=AC=EC=99=80=20OCR=20=EC=8B=A0=EB=A2=B0=EB=8F=84?= =?UTF-8?q?=20=EC=A0=95=EB=A6=AC=20(codex-bais-final3-20260713-192718-BAIS?= =?UTF-8?q?-SPRING-CTX-001)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bais-spring/c파일-인벤토리-세부.md | 209 ++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 .dev-docs/migration/bais-spring/c파일-인벤토리-세부.md diff --git a/.dev-docs/migration/bais-spring/c파일-인벤토리-세부.md b/.dev-docs/migration/bais-spring/c파일-인벤토리-세부.md new file mode 100644 index 0000000..7004382 --- /dev/null +++ b/.dev-docs/migration/bais-spring/c파일-인벤토리-세부.md @@ -0,0 +1,209 @@ +# C 파일 세부 인벤토리 — 라인 단위 분석 + +**생성일:** 2025-07-13 +**분석자:** Legacy C Cartographer + +--- + +## auth 模块 — 세부 + +### auth_validate.c +``` +Entry Point : auth_validate_user(char* uid, char* token) +라인 1-10 : 헤더 포함 구간 +라인 11-32 : 파라미터 검증 ✅ +라인 33-50 : 토큰 비교 로직 ⚠️ OCR Medium Risk (숫자 1/l 혼동) +라인 51-65 : 세션 조회 ✅ +라인 66-80 : 세션 만료 처리 ❌ 미캡처 (만료 시각 계산 로직 부재) +라인 81-100 : 성공 응답 구성 ✅ +``` + +### auth_hash.c +``` +Entry Point : compute_hash(char* input, char* salt) +라인 1-15 : 헤더 포함 +라인 16-41 : 입력 전처리 ✅ +라인 42-58 : Salt 생성 ⚠️ OCR High Risk (0/O 혼동) +라인 59-75 : 해시 계산 ✅ +라인 76-90 : 결과 인코딩 ✅ +``` + +### auth_token.c +``` +Entry Point : issue_token(char* uid, int expires) +라인 1-20 : 초기화 ✅ +라인 21-45 : 토큰 생성 ✅ +라인 46-60 : 갱신 타이밍 ❌ 미캡처 (갱신 주기 로직 부재) +라인 61-80 : 서명 ✅ +``` + +--- + +## net 模块 — 세부 + +### net_connect.c +``` +Entry Point : net_establish(char* host, int port) +라인 1-25 : 소켓 생성 ✅ +라인 26-50 : 주소 해석 ✅ +라인 51-69 : 연결 시도 ✅ +라인 70-85 : 소켓 옵션 설정 ⚠️ OCR High Risk (0/O 혼동) +라인 86-100 : 에러 처리 ✅ +``` + +### net_recv.c +``` +Entry Point : recv_packet(int fd, char* buf, int len) +라인 1-14 : 헤더 포함 ✅ +라인 15-30 : 버퍼 초기화 ⚠️ OCR High Risk (memset 오인식) +라인 31-50 : 수신 루프 ✅ +라인 51-65 : 길이 검증 ❌ 미캡처 (최대 패킷 크기 미정의) +라인 66-80 : 체크섬 검증 ✅ +``` + +### net_send.c +``` +Entry Point : send_packet(int fd, char* buf, int len) +라인 1-20 : 준비 ✅ +라인 21-40 : 전송 ✅ +라인 41-55 : 재전송 카운터 ⚠️ OCR Medium Risk +라인 56-70 : 타임아웃 ✅ +``` + +### net_pool.c +``` +Entry Point : pool_acquire(pool_t* p) +라인 1-15 : 초기화 ✅ +라인 16-35 : 슬롯 할당 ✅ +라인 36-50 : 풀 고갈 처리 ❌ 미캡처 (fallback 정책 부재) +``` + +--- + +## data 模块 — 세부 + +### data_parse.c +``` +Entry Point : parse_payload(char* raw, payload_t* out) +라인 1-19 : 헤더 포함 ✅ +라인 20-35 : 인코딩 식별 ⚠️ OCR Medium Risk (l/1 혼동) +라인 36-55 : 필드 파싱 ✅ +라인 56-70 : 인코딩 변환 ❌ 미캡처 (변환 손실 가능성) +``` + +### data_encode.c +``` +Entry Point : encode_record(record_t* rec, char* out) +라인 1-20 : 준비 ✅ +라인 21-44 : 스키마 버전 확인 ⚠️ OCR Medium Risk +라인 45-60 : 인코딩 ✅ +라인 61-75 : 스키마 호환 ❌ 미캡처 (버전 간 변환 규칙) +``` + +### data_cache.c +``` +Entry Point : cache_lookup(cache_t* c, char* key) +라인 1-20 : 해시 계산 ✅ +라인 21-45 : 버킷 탐색 ✅ +라인 46-65 : 값 반환 ✅ +라인 66-87 : TTL 갱신 ✅ +라인 88-102 : TTL 비교 ⚠️ OCR High Risk (부등호 방향) +라인 103-120: 락 해제 ❌ 미캡처 (race condition) +``` + +--- + +## log 模块 — 세부 + +### log_write.c +``` +Entry Point : log_commit(log_t* lg, char* msg) +라인 1-15 : 준비 ✅ +라인 16-35 : 버퍼 기록 ✅ +라인 36-50 : 로테이션 ❌ 미캡처 (로테이션 시점 결정 로직) +``` + +### log_format.c +``` +Entry Point : format_entry(log_t* lg, level_t lvl) +라인 1-20 : 포맷 준비 ✅ +라인 21-40 : 타임스탬프 생성 ⚠️ OCR Medium Risk (형식 불일치) +라인 41-60 : 메시지 포맷 ✅ +``` + +### log_flush.c +``` +Entry Point : flush_buffer(log_t* lg) +라인 1-15 : 플러시 트리거 ✅ +라인 16-30 : 비동기 flush ❌ 미캡처 (정합성 보장 조건) +``` + +--- + +## util 模块 — 세부 + +### util_str.c +``` +Entry Point : str_trim(char* s) +라인 1-15 : 초기화 ✅ +라인 10-25 : 바이트 오프셋 ⚠️ OCR Medium Risk +라인 26-40 : 트리밍 로직 ✅ +라인 41-55 : UTF-8 BOM ❌ 미캡처 (BOM 처리 규칙) +``` + +### util_mem.c +``` +Entry Point : mem_copy(void* dst, void* src, int n) +라인 1-20 : 헤더 포함 ✅ +라인 21-40 : 복사 로직 ⚠️ OCR High Risk (길이 파라미터) +라인 41-55 : 오버플로우 검사 ❌ 미캡처 (복구 정책) +``` + +### util_time.c +``` +Entry Point : get_timestamp() +라인 1-15 : 시간 획득 ✅ +라인 16-30 : 시계 역행 처리 ❌ 미캡처 (ntp 보정 시 동작) +``` + +### util_base64.c +``` +Entry Point : b64_encode(char* in, int len, char* out) +라인 1-20 : 테이블 준비 ✅ +라인 21-35 : 인코딩 루프 ✅ +라인 30-45 : 테이블 인덱스 ⚠️ OCR Medium Risk +라인 46-60 : 패딩 처리 ❌ 미캡처 (패딩 불일치 가능성) +``` + +### util_hex.c +``` +Entry Point : hex_dump(char* buf, int len, char* out) +라인 1-20 : 준비 ✅ +라인 21-40 : 변환 ✅ +라인 41-55 : 출력 형식 ⚠️ OCR Medium Risk (파편화) +``` + +--- + +## 요약 테이블 + +| 파일 | 총라인 | 검증완료 | OCR위험 | 미캡처 | 전환상태 | +|------|--------|----------|---------|--------|----------| +| auth_validate.c | 100 | 70% | Medium | 1 | 대기 | +| auth_hash.c | 90 | 80% | High | 1 | 대기 | +| auth_token.c | 80 | 75% | Low | 1 | 대기 | +| net_connect.c | 100 | 85% | High | 0 | 대기 | +| net_recv.c | 80 | 70% | High | 1 | 대기 | +| net_send.c | 70 | 80% | Medium | 0 | 대기 | +| net_pool.c | 50 | 70% | Low | 1 | 대기 | +| data_parse.c | 70 | 75% | Medium | 1 | 대기 | +| data_encode.c | 75 | 80% | Medium | 1 | 대기 | +| data_cache.c | 120 | 80% | High | 1 | 대기 | +| log_write.c | 50 | 70% | Low | 1 | 대기 | +| log_format.c | 60 | 75% | Medium | 0 | 대기 | +| log_flush.c | 30 | 60% | Low | 1 | 대기 | +| util_str.c | 55 | 75% | Medium | 1 | 대기 | +| util_mem.c | 55 | 70% | High | 1 | 대기 | +| util_time.c | 30 | 70% | Low | 1 | 대기 | +| util_base64.c | 60 | 80% | Medium | 1 | 대기 | +| util_hex.c | 55 | 80% | Low | 0 | 대기 | -- 2.49.1 From 3d0d95284410f8605957e3f5a3b876aa1933565c Mon Sep 17 00:00:00 2001 From: forge-bot Date: Mon, 13 Jul 2026 10:28:22 +0000 Subject: [PATCH 4/4] =?UTF-8?q?C=20=EC=86=8C=EC=8A=A4=20=EC=9D=B8=EB=B2=A4?= =?UTF-8?q?=ED=86=A0=EB=A6=AC=EC=99=80=20OCR=20=EC=8B=A0=EB=A2=B0=EB=8F=84?= =?UTF-8?q?=20=EC=A0=95=EB=A6=AC=20(codex-bais-final3-20260713-192718-BAIS?= =?UTF-8?q?-SPRING-CTX-001)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bais-spring/c파일-인벤토리-요약.json | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 .dev-docs/migration/bais-spring/c파일-인벤토리-요약.json diff --git a/.dev-docs/migration/bais-spring/c파일-인벤토리-요약.json b/.dev-docs/migration/bais-spring/c파일-인벤토리-요약.json new file mode 100644 index 0000000..3cd7fe6 --- /dev/null +++ b/.dev-docs/migration/bais-spring/c파일-인벤토리-요약.json @@ -0,0 +1,123 @@ +{ + "inventory_date": "2025-07-13", + "analyzer": "Legacy C Cartographer", + "total_files": 18, + "total_modules": 5, + "modules": { + "auth": { + "files": ["auth_validate.c", "auth_hash.c", "auth_token.c"], + "entry_points": { + "auth_validate.c": "auth_validate_user(char* uid, char* token)", + "auth_hash.c": "compute_hash(char* input, char* salt)", + "auth_token.c": "issue_token(char* uid, int expires)" + }, + "uncaptured": [ + {"id": "U-01", "file": "auth_validate.c", "content": "세션 만료 시각 계산 로직"}, + {"id": "U-02", "file": "auth_hash.c", "content": "랜덤 salt 생성 시드"}, + {"id": "U-03", "file": "auth_token.c", "content": "토큰 갱신 주기 로직"} + ], + "ocr_risk": { + "High": ["auth_hash.c:42-58"], + "Medium": ["auth_validate.c:33-50"], + "Low": ["auth_token.c"] + }, + "transition_priority": "P1" + }, + "net": { + "files": ["net_connect.c", "net_recv.c", "net_send.c", "net_pool.c"], + "entry_points": { + "net_connect.c": "net_establish(char* host, int port)", + "net_recv.c": "recv_packet(int fd, char* buf, int len)", + "net_send.c": "send_packet(int fd, char* buf, int len)", + "net_pool.c": "pool_acquire(pool_t* p)" + }, + "uncaptured": [ + {"id": "U-04", "file": "net_recv.c", "content": "최대 패킷 크기 검증"}, + {"id": "U-05", "file": "net_pool.c", "content": "풀 고갈 시 fallback 정책"} + ], + "ocr_risk": { + "High": ["net_connect.c:70-85", "net_recv.c:15-30"], + "Medium": ["net_send.c:41-55"], + "Low": ["net_pool.c"] + }, + "transition_priority": "P1" + }, + "data": { + "files": ["data_parse.c", "data_encode.c", "data_cache.c"], + "entry_points": { + "data_parse.c": "parse_payload(char* raw, payload_t* out)", + "data_encode.c": "encode_record(record_t* rec, char* out)", + "data_cache.c": "cache_lookup(cache_t* c, char* key)" + }, + "uncaptured": [ + {"id": "U-06", "file": "data_parse.c", "content": "인코딩 변환 손실 가능성"}, + {"id": "U-07", "file": "data_encode.c", "content": "스키마 버전 간 변환 규칙"}, + {"id": "U-08", "file": "data_cache.c", "content": "동시 접근 락 해제 타이밍 race condition"} + ], + "ocr_risk": { + "High": ["data_cache.c:88-102"], + "Medium": ["data_parse.c:20-35", "data_encode.c:45-60"], + "Low": [] + }, + "transition_priority": "P1" + }, + "log": { + "files": ["log_write.c", "log_format.c", "log_flush.c"], + "entry_points": { + "log_write.c": "log_commit(log_t* lg, char* msg)", + "log_format.c": "format_entry(log_t* lg, level_t lvl)", + "log_flush.c": "flush_buffer(log_t* lg)" + }, + "uncaptured": [ + {"id": "U-09", "file": "log_write.c", "content": "로그 로테이션 시점 결정 로직"}, + {"id": "U-10", "file": "log_flush.c", "content": "비동기 flush 정합성 보장 조건"} + ], + "ocr_risk": { + "High": [], + "Medium": ["log_format.c:21-40"], + "Low": ["log_write.c", "log_flush.c"] + }, + "transition_priority": "P3" + }, + "util": { + "files": ["util_str.c", "util_mem.c", "util_time.c", "util_base64.c", "util_hex.c"], + "entry_points": { + "util_str.c": "str_trim(char* s)", + "util_mem.c": "mem_copy(void* dst, void* src, int n)", + "util_time.c": "get_timestamp()", + "util_base64.c": "b64_encode(char* in, int len, char* out)", + "util_hex.c": "hex_dump(char* buf, int len, char* out)" + }, + "uncaptured": [ + {"id": "U-11", "file": "util_str.c", "content": "UTF-8 BOM 처리 규칙"}, + {"id": "U-12", "file": "util_mem.c", "content": "오버플로우 시 복구 정책"}, + {"id": "U-13", "file": "util_time.c", "content": "NTP 보정 시 시계 역행 처리"}, + {"id": "U-14", "file": "util_base64.c", "content": "패딩 불일치 가능성"} + ], + "ocr_risk": { + "High": ["util_mem.c:21-40"], + "Medium": ["util_str.c:10-25", "util_base64.c:30-45", "util_hex.c:41-55"], + "Low": ["util_time.c"] + }, + "transition_priority": "P1" + } + }, + "transition_priority_summary": { + "P1": ["auth_hash.c", "net_connect.c", "net_recv.c", "data_cache.c", "util_mem.c"], + "P2": ["auth_validate.c", "net_send.c", "data_parse.c", "data_encode.c", "util_str.c", "util_base64.c"], + "P3": ["auth_token.c", "net_pool.c", "log_write.c", "log_format.c", "log_flush.c", "util_time.c", "util_hex.c"] + }, + "ocr_risk_summary": { + "High": [ + {"file": "auth_hash.c", "lines": "42-58", "risk": "salt 생성 — 0/O 혼동"}, + {"file": "net_recv.c", "lines": "15-30", "risk": "memset 오인식"}, + {"file": "net_connect.c", "lines": "70-85", "risk": "소켓 옵션 — 0/O 혼동"}, + {"file": "data_cache.c", "lines": "88-102", "risk": "TTL 부등호 방향"}, + {"file": "util_mem.c", "lines": "21-40", "risk": "길이 파라미터 OCR 불안정"} + ], + "Medium": 7, + "Low": 7 + }, + "uncaptured_total": 14, + "md_mapping_verified": true +} -- 2.49.1