기여 목록 / 8413926
media: Remove deprecated H264Parser::FindStartCodeInClearRanges overload
H264Parser 에 남아 있던 폐기 오버로드를 제거했습니다. 호출부가 이미 0개였기 때문에 선언과 정의만 삭제하는 작업이었습니다.
문제 설명
media/parsers/h264_parser.h 에 FindStartCodeInClearRanges 가 두 벌 있었습니다.
static bool FindStartCodeInClearRanges(base::span<const uint8_t> data,
const Ranges<const uint8_t*>& ranges,
size_t* offset,
size_t* start_code_size);
// DEPRECATED: Use the above `base::span` variant to avoid unsafe buffer usage.
// TODO(https://crbug.com/40284755): Remove this once the callers are gone.
static bool FindStartCodeInClearRanges(const uint8_t* data,
off_t data_size,
const Ranges<const uint8_t*>& ranges,
off_t* offset,
off_t* start_code_size- 주석이 조건부 삭제를 요청하고 있었습니다 — "호출부가 사라지면 이걸 제거하라".
- 폐기 버전의 본체에는 로직이 없었습니다. 포인터와 길이를 spa겨주는 다리 역할만 합니다.
bool H264Parser::FindStartCodeInClearRanges(
const uint8_t* data, off_t data_size, ...) {
size_t offset = 0;
size_t size = 0;
bool result = FindStartCodeInClearRanges(
UNSAFE_TODO(base::span(data, base::checked_cast<size_t>
ranges, &offset, &size);
*start_code_offset = offset;
*start_code_size = size;
return result;
}해결 내용
핵심은 "정말 호출부가 0개인가"를 증명하는 것이었습니다. 이름 자체를 저장소 전체에서 검색한 뒤 나온 결과를 전부분류했습니다.
git grep -n "FindStartCodeInClearRanges" origin/main저장소 전체에서 9곳이 나왔습니다.
- 선언 2곳 — 헤더의 두 오버로드
- 정의 2곳 — 구현부의 두 오버로드
- 호출 5곳 —
h264_parser.cc2곳,h265_nalu_parser.cc2곳, 그리고 폐기 버전 본체가 span 버전을 부르는 다리 1곳
폐기 오버로드를 외부에서 부르는 곳은 0개였습니다.
판정은 인자 개수로 명확했습니다. 두 오버로드는 인자가 4개와 5개로 다르고, 호출부 4곳은 모두 4개를 넘깁니다.
H264Parser::FindStartCodeInClearRanges(stream_, encrypted_ranges_, &nalu_start_off,
&annexb_start_code_size) 그래서 선언 9줄과 정의 16줄을 삭제하는 것으로 끝났습니다.
삭제 후 UNSAFE_TODO 와 base::checked_cast, off_t 관련 include 정리가 따라붙지 않는 것도 확인했습니다.
테스트 방법
obj/media/parsers/parsers/h264_parser.o컴파일 확인- CQ 드라이런 42/42 통과 — 실패·flaky 0건
h265_nalu_parser.cc 는 로컬 빌드 설정이 enable_platform_hevc = false 라 컴파일되지 않아, HEVC 가 켜진 트라이봇에서만 검증할 수 있었습니다.
배운점
전수 조사는 이름으로 한다. 직전 기여에서 호출부 누락을 두 번 겪었습니다.
로컬 빌드가 못 보는 코드가 있다. h265_nalu_parser.cc 는 enable_platform_hevc = false 때문에 컴파일 대상이 아니었습니다.
범위를 좁힌 것이 유효했다. 같은 헤더의 SetStream 오버로 중인 다른 CL 과 겹쳐 제외했습니다.
참고 자료
- crbug.com/40284755 — unsafe buffer 정리 우산 이슈
- crrev.com/c/8313727 — 직전
- 대상 코드:
media/parsers/h264_parser.h·media/parsers/h264_parser.cc