Apache Kafka · Kafka Connect · open

PR #22536 — KAFKA-20656: Struct honors ByteBuffer remaining bytes

Kafka Connect의 Struct BYTES 처리가 ByteBuffer.array()를 그대로 사용해 position/limit을 무시하던 패턴을 position()/remaining() 기반으로 정리. 직접 버퍼와 슬라이스/duplicate 버퍼 양쪽에서 안전.

증상

Struct에서 BYTES 필드를 다룰 때 buffer.array()를 그대로 가져다 쓰는 코드 경로가 있었습니다. 직접 할당된 버퍼에서는 position이 보통 0이라 문제 없어 보이지만, slice 또는 duplicate된 버퍼에서는 자기 영역 밖 데이터를 그대로 직렬화/비교에 사용해 잘못된 BYTES 값을 만들거나 잘못된 equality 결과를 낼 수 있습니다.

수정

BYTES 경로의 비교/직렬화에서 buffer.array() 대신 position()/remaining() 또는 절대 인덱스를 사용하도록 변경. Kafka의 BYTES 계약("현재 위치부터 remaining 만큼")에 구현을 정렬.

관련 PR (시리즈)