OSSCA Chromium

기여 목록 / 8457502

[media] Remove the kStrictFFmpegCodecs kill switch

MediacleanupMerged

FFmpeg 디코더가 비트스트림 오류를 만나면 계속 진행하지 않고 바로 멈추게 하는 설정(AV_EF_EXPLODE)을 감싸고 있던 킬스위치 kStrictFFmpegCodecs를 제거했습니다. «M133이 stable이 되면 제거»라는 주석과 함께 2024-11에 들어온 플래그로, 22개 마일스톤 동안 기본 켜짐이었으므로 동작은 바뀌지 않습니다(crbug.com/379418979). 1파일 +1/−7. 2026-09-28에 머지됐습니다(c5f1089ef9935). tmathmeyer@와 원 CL 작성자 dalecurtis@의 +1을 받았고, dalecurtis@가 CQ를 돌려 한 번에 통과했습니다.

문제 설명

  • issue url: https://crbug.com/379418979
  • 코드 주석이 «security sensitive»라고 적고 있듯, FFmpeg은 오류가 난 뒤에도 항상 안전하게 계속 디코딩한다고 보장하지 않습니다. CL 6040303이 첫 오류에서 디코딩을 멈추도록 err_recognition |= AV_EF_EXPLODE를 켜면서 롤백용 킬스위치로 감쌌습니다.
  • 지금은 조건문 하나와 플래그 정의만 남아 있었습니다.

해결 내용

  • media/ffmpeg/ffmpeg_common.cc에서 BASE_FEATURE 정의와 TODO를 지웠습니다.
  • AV_EF_EXPLODE를 항상 설정하도록 조건을 없앴습니다. 이미 켜져 있던 엄격한 쪽을 고정하는 것이라 보안이 약해지는 방향이 아닙니다.
  • 파일에서 유일한 FeatureList 사용이 사라져 base/feature_list.h include도 제거했습니다.
-  if (base::FeatureList::IsEnabled(kStrictFFmpegCodecs)) {
-    codec_context->err_recognition |= AV_EF_EXPLODE;
-  }
+  codec_context->err_recognition |= AV_EF_EXPLODE;

발굴 과정

«Remove … M» 만료 주석 스윕에서 나온 항목입니다. 보안 관련 주석이 있어 «지웠을 때 어느 쪽으로 고정되는가»를 먼저 확인했습니다. 첫 리뷰어는 원 CL을 리뷰한 tmathmeyer@입니다. OSSCA #523.

테스트 방법

  • J(kAccurateVideoFrameConverterColorSpace)와 통합 브랜치에서 media_unittests 빌드: Mac M5, 27분 50초 / 9,482 스텝
  • media_unittests --gtest_filter='FFmpeg*:AudioFileReaderTest.*:AudioDecoderTest*:*FFmpegVideoDecoder*' 219/219 통과
  • presubmit 0 경고

배운 점

  • 보안 관련 킬스위치를 지울 때는 «남는 쪽이 더 엄격한가»를 CL 설명과 기록에 분명히 적어 리뷰어의 확인 부담을 줄입니다.
  • 원격 동작(업로드) 여러 건을 한 명령에 묶었다가 중간에 멈추면, 앞의 것은 이미 올라가 있을 수 있습니다. 이 CL이 그렇게 올라갔고, 브랜치에 CL 번호가 저장되지 않아 git cl issue로 직접 연결했습니다.

참고 자료