fix: FLAT 직렬화 시 비활성 조건부 GROUP 블록 바이트 포함 버그 수정

toByteArray() / getBytesDataLength() GROUP 케이스에서
size==0 이면 refPath/refValue 유무와 무관하게 무조건 skip 하도록 변경.
(toJson() 동작과 일치)

기존 로직은 refPath 또는 refValue 가 없는 경우에만 skip 하여,
조건부 블록(EZDATA, MSG 등)이 비활성 상태(size=0, isHidden=false)일 때도
FLAT 바이트에 잘못 포함되는 문제가 있었음.
→ FlatReader 파싱 시 오프셋 불일치로 overflow 예외 또는 DATA 필드 오염 발생.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
curry772
2026-04-23 10:34:22 +09:00
parent 024b24af49
commit 5dae063fe5
@@ -1023,13 +1023,8 @@ public class StandardItem implements Serializable, Cloneable {
totalSize += getLength();
break;
case StandardType.GROUP :
// skip variable group
if( getSize() == 0
//카카오뱅크 => 카카오카드 400응답시 아래 로직을 추가해야 전체건수에서 메시지부가 처리됨
//메시지부 size 0 refPath refValue 사용 해서 있고 없고 처리
&& (StringUtils.isBlank(getRefPath())
|| StringUtils.isBlank(getRefValue()))
) {
// skip inactive/conditional group (size==0 means not activated)
if( getSize() == 0 ) {
break;
}
if (isHidden) break;
@@ -1123,13 +1118,8 @@ public class StandardItem implements Serializable, Cloneable {
}
break;
case StandardType.GROUP :
// skip variable group
if( getSize() == 0
//카카오뱅크 => 카카오카드 400응답시 아래 로직을 추가해야 전체건수에서 메시지부가 처리됨
//메시지부 size 0 refPath refValue 사용 해서 있고 없고 처리
&& (StringUtils.isBlank(getRefPath())
|| StringUtils.isBlank(getRefValue()))
) {
// skip inactive/conditional group (size==0 means not activated)
if( getSize() == 0 ) {
break;
}
if (isHidden) break;