Skip to content

fix(security): FQDataType/SafeObjectInputStream 후속 개선 4가지 #8

Description

@ppzxc

PR #7 코드 리뷰에서 도출된 후속 개선 사항입니다.

1. FQDataType.write() — try-with-resources 적용

위치: FQDataType.java:77-78

// 현재
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
oos.close();

// 개선
try (ObjectOutputStream oos = new ObjectOutputStream(baos)) {
    oos.writeObject(obj);
}

ByteArrayOutputStream이라 실제 리소스 누수는 없으나, 코드 일관성 및 향후 변경 안전성을 위해 try-with-resources 사용 권장.


2. SafeObjectInputStream — 다차원 배열 처리 추가

위치: SafeObjectInputStream.java:414

현재 [L...; 1단계 배열과 길이 2인 기본 타입 배열만 허용. [[Ljava.lang.String; 같은 다차원 객체 배열은 차단됨.

개선 방향:

  • 재귀 호출로 다차원 배열([[L...;, [[[L...;) 지원
  • 또는 Javadoc에 "1차원 배열만 지원" 명시

3. FQDataType.getMemory() — 고정값 개선 또는 문서화

위치: FQDataType.java:68-70

@Override
public int getMemory(T obj) {
    return 1024; // 하드코딩
}

H2 MVStore의 캐시 크기 추정에 사용되는 값으로, 실제 객체 크기와 괴리가 크면 캐시 효율이 저하될 수 있음.

개선 방향:

  • 추정값 반환 (e.g., 직렬화 후 byte 배열 길이 기반)
  • 또는 Javadoc에 "고정 추정값, 캐시 정밀도보다 단순성 우선" 의도 명시

4. 불필요한 커밋 쌍 정리 — H2 업그레이드/롤백

커밋: 143adc4 (2.2.224 → 2.3.232 업그레이드), 551e177 (2.3.232 → 2.2.224 롤백)

두 커밋이 상쇄되어 net change = 0이나 히스토리에 그대로 남아 있음. squash merge 전 git rebase -i로 두 커밋을 fixup 또는 drop 처리 권장.


관련 PR: #7

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions