핵심 요약
- 안드로이드 최신 빌드의 C 라이브러리(bionic)에서 이모지나 한글 등 특정 유니코드 문자를 구분자로 잘못 인식해 게임 로딩 등이 터지는 버그가 발생했습니다.
- 공개된 AOSP 소스에는 해당 변경점이 반영되지 않아 최신 코드를 볼 수 없자, 한 개발자가 기기 라이브러리를 직접 디스어셈블해 어셈블리 레벨에서 원인을 분석해 리포트했습니다.
- 구글 측 개발자도 소스 공개가 너무 느려 4월 변경점조차 안 올라온 사실을 인정하며 버그를 수정하겠다고 답변했습니다.
요약 최근 안드로이드 최신 빌드에서 기본 C 라이브러리(bionic libc)의 치명적인 버그로 인해 앱이 비정상 동작하는 사태가 발생했습니다. 문제가 된 함수는 유니코드 와이드 문자열을 탐색하는 wcscspn()과 wcspbrk()로, 개행 문자나 와일드카드 같은 2개 이상의 ASCII 문자를 구분자로 지정했을 때 U+0100 이상의 문자(이모지, 한글 등 CJK, 키릴 문자, 그리스 문자 등)가 나타나면 이를 무조건 일치하는 구분자로 잘못 인식해 검색을 중단해 버리는 결함이었습니다.
이 버그로 인해 안드로이드용 Visual Pinball 게임의 스크립트 엔진에서 주석에 이모지가 포함되어 있으면 줄바꿈을 제대로 찾지 못해 구문 에러를 뿜으며 게임 테이블이 로드되지 않거나, 파일 경로 이동 시 특정 문자가 와일드카드로 오인되는 등 실제 소프트웨어 오작동 피해가 잇따랐습니다.
더욱 흥미로운 점은 구글의 AOSP(안드로이드 오픈소스 프로젝트) 공개 소스코드 업데이트가 지나치게 늦어지면서 발생한 해프닝입니다. 공개된 안드로이드 17 소스는 6월 릴리스 시점의 정상 코드였지만, 기기에 배포된 9월 빌드에는 이미 성능 최적화를 시도하다가 발생한 회귀 버그가 반영되어 있었습니다. 개발자는 최신 소스코드가 공개되지 않자 기기에 탑재된 라이브러리(libc.so) 바이너리를 직접 디스어셈블(역어셈블)하여 어셈블리 명령어를 한 줄씩 분석해 버그의 정확한 메커니즘을 밝혀내고 이슈를 등록했습니다.
구글 내부 개발자 역시 제보된 내용이 맞다고 인정하며 "소스코드를 보면 되지 않느냐고 말하려 했더니, 외부 공개 브랜치가 너무 오래되어 지난 봄 변경점조차 반영되지 않은 상태였다"고 씁쓸하게 인정하며 테스트 케이스 추가 및 수정을 약속했습니다.
해외 반응 번역
맞는 분석인 것 같고 현재 최신 개발 버전(ToT)에서도 여전히 문제인 것 같습니다. (소스코드 보면 되지 않냐고 하려 했는데, 정작 외부에 공개된 최신 릴리스 소스가 너무 오래돼서 4월 변경 사항도 아직 안 들어가 있네요 ㅠㅠ) 빠진 테스트 케이스를 추가하고 다른 곳에도 영향이 있는지 확인해 보겠습니다.
Sponsored · 광고