기여 목록 / 8353444
FSA: Permit certain format characters in FSA file names
ContentfixIn Review
네이티브 FSA 파일명에서 U+200B·U+200C·U+200D를 비 Apple 플랫폼에 한해 허용하는 패치입니다. 검사용 사본만 치환하고 실제 파일 이름은 보존합니다.
문제 설명
U+200B가 들어간 파일은 직접 선택하면 열 수 있지만 디렉터리 반복에서는 누락되고 getFileHandle()로도 접근하지 못할 수 있습니다. 텍스트·이모지에 쓰이는 연결 제어 문자를 일괄 금지하는 검증 때문에 파일 접근 경로에 따라 동작이 달랐습니다.
해결 내용
- 비 Apple 플랫폼의
IsSafePathComponent()에서 U+200B ZERO WIDTH SPACE, U+200C ZERO WIDTH NON-JOINER, U+200D ZERO WIDTH JOINER를 검사용 사본의+로 바꾼 뒤 이름을 검사합니다. - 문자를 삭제하지 않아 위치를 보존하고, Windows 8.3 이름에 허용되지 않는
+를 사용해 짧은 이름으로 잘못 판단하는 경우를 피합니다. 실제 파일 작업과 다른 안전성 검사에는 원래 이름을 유지합니다. - HFS+가 연결 제어 문자를 무시하는 특성을 고려해 Apple의 기존 제한을 유지합니다. 다른 형식 문자, 위험한 확장자와 끝의 점 같은 제한도 계속 검사합니다.
테스트 방법
- 기존
GetEntries테스트에 U+200B 파일명, U+200C가 들어간 텍스트, U+200D 이모지 파일명을 추가하고 UTF-8 경로로 파일을 생성합니다. GetFileAllowsFormatCharacters는 해당 이름으로 파일을 생성한 뒤 다시 조회할 수 있는지 확인합니다. 이 테스트는 비 Apple 플랫폼에 한정합니다.IsSafePathComponent테스트는 허용할 세 문자와 여전히 거절할 양방향 제어 문자·다른 형식 문자·위험한 확장자·Windows 짧은 이름을 비교합니다.
확인한 CQ 통과 기록은 Patch Set 9(2026-09-12 UTC)입니다. 현재 보고서가 다루는 Patch Set 10의 통과 결과는 확인되지 않았으므로 이전 결과와 구분합니다. 보고서 작성 과정에서 Chromium 테스트를 별도로 실행하지는 않았습니다.
관련 이슈와 외부 PR
이모지 ZWJ 문맥을 공통 계층에서 검증하는 CL 8302834는 별도 접근입니다. 두 CL의 허용 범위를 동일하게 취급하지 않습니다.
배운 점
- 파일명 검사에 쓸 문자열을 가공하더라도 실제 파일 이름과 다른 보안 검사의 의미를 유지해야 합니다.
- 같은 Unicode 문자라도 파일 시스템의 정규화 방식이 다르면 플랫폼별 허용 범위를 구분해야 합니다.