Apple은 몇 달 동안 버그가 있었습니다. 이제 iPhone의 텍스트 렌더링 기능에 새롭고 심각한 버그가 생겼습니다. 이 버그는 단일 텔루구어 문자에 의해 유발되며, 이 문자를 포함하는 알림을 수신하는 것만으로도 iPhone이 깨지지 않는 부팅 루프에 들어갈 수 있습니다. 단일 캐릭터가 iOS에서 왜 그렇게 큰 문제를 일으킬 수 있는지 알아보자.
참고: 텔루구어 버그에 대한 수정 사항은 최신 버전의 iOS(11.2.6)에서 사용할 수 있습니다. 텔루구어 캐릭터가 앱이나 기기를 잠근 경우 iTunes를 통해 iPhone을 복원하고 최신 버전의 iOS로 업데이트하십시오. iPhone이 부팅 루프에 빠진 경우 iTunes에서 인식하도록 하려면 장치 펌웨어 업데이트(DFU) 상태로 전환해야 할 수 있습니다. 완료되면 가장 최근에 생성한 백업에서 기기를 복원합니다.
텔루구어란 무엇입니까?
텔루구어는 인도 일부, 특히 안드라프라데시 주, 텔랑가나 주 및 야남 마을에서 사용되는 언어입니다. 아랍어 및 기타 브라흐어 스크립트와 같은 많은 스크립트 기반 언어와 마찬가지로 텔루구어는 컴퓨터 화면에 해당 문자를 표시하기 위해 유니코드 문자 집합의 일부 특수 기능을 사용합니다.
대부분의 라틴 문자는 ASCII 호환성을 위해 단일 8비트 유니코드 코드 포인트로 표시되지만(예:문자 A 유니코드 코드 포인트 U+0041
에 존재 이진법으로 01000001
로 표시됩니다. ), 스크립트 또는 비 라틴 문자로 작성된 언어는 일반적으로 문자를 나타내기 위해 둘 이상의 유니코드 코드 포인트를 결합합니다.
이는 텔루구어와 같이 언어 버전의 문자를 클러스터로 결합하는 언어의 경우 특히 그렇습니다. 영어의 문체 합자와 달리 각 텔루구어 문자 간의 연결은 언어적으로 중요합니다. 이를 수용하기 위해 유니코드에는 각각 고유한 코드 포인트로 표시되는 문자를 서로 연결하는 복잡한 시스템이 포함되어 있습니다.
유니코드 코드 포인트의 순전한 수를 고려할 때 이것은 거의 무한한 다양성을 생성할 수 있습니다. 이 포인트는 함께 결합되어 읽기 쉬운 문자를 렌더링합니다. 이런 식으로 유니코드는 문자 그대로 가능한 모든 텔루구어 단어에 대해 유니코드 코드 포인트가 필요하지 않습니다. 대신 유니코드는 텔루구어 자음, 모음 및 분음 부호('비라마')를 결합하여 단일 문자처럼 표시되는 단어를 만듭니다. 아랍어와 같이 합자에 대한 철자법 규칙이 있는 다른 언어에도 동일하게 적용됩니다.
충돌의 원인은 무엇입니까?
문제는 코드 포인트 U+200C
에서 Zero Width Non-Joiner(ZWNJ)와 관련된 것 같습니다. . ZWNJ는 두 개의 인접한 문자가 일반적인 합자 없이 렌더링되도록 요청합니다. 영어에서 ZWNJ는 문자 ff가 표준 연결 합자로 인쇄되는 것을 방지하고 대신 각 f를 분리합니다. 그러나 4개의 특정 텔루구어 코드 포인트 세트와 결합하면(모두 단일 클러스터로 결합되어야 함) 어떤 이유로 iOS에서 결과를 제대로 표시할 수 없습니다.
일부에서는 Apple의 San Francisco 글꼴이 문자를 표시할 수 없다고 추측하는 반면 다른 일부에서는 Apple이 사용하는 특정 렌더링 프로세스가 원인이라고 말했습니다. 정확한 원인이 무엇이든 캐릭터를 렌더링하려는 시도는 메시지 및 WhatsApp에서 Springboard에 이르기까지 캐릭터를 렌더링하는 모든 것에 극적인 충돌을 일으킵니다. 문자를 구성하는 유니코드 코드 포인트("gya"는 "지식"을 의미)는 다음과 같습니다.
U+0C1C
자 ( )U+0C4D
virama 또는 발음 구별 부호( )U+0C1E
냐 ( )U+200C
너비가 0이 아닌 비 조이너U+0C3E
아아 ( )
그러나 ZWNJ(Zero Width Non-Joiner)만 탓할 수도 없습니다. 무해한 가족 이모티콘(????)에도 문제 없이 사용됩니다. 일부 특정 코드 포인트와 ZWNJ의 특정 조합인 것 같습니다. 부상에 대한 모욕을 더하면 ZWNJ가 이 텔루구어 클러스터의 렌더링에 특별한 영향을 미치지 않거나 애초에 존재하지 않아야 하는 것처럼 보입니다.
기타 브라만 문자 문제
그러나 텔루구어는 이 문제가 있는 유일한 언어가 아닙니다. 브라만 문자에 대해 비슷한 방식으로 유니코드를 사용하는 벵골어와 데바나가리어에도 같은 문제가 있습니다. Manish Goregaokar는 정확한 충돌 사례를 더욱 자세히 설명하는 흥미롭고 상세한 블로그 게시물을 작성합니다.
<블록 인용>
모든 시퀀스 <consonant1, virama, consonant2, ZWNJ, vowel>
데바나가리, 벵골어 및 텔루구어:
1. consonant2
접미사 결합(pstf
/vatu
)
2. consonant1
reph 형성 문자가 아닙니다
3. vowel
두 개의 글리프 구성 요소가 없습니다.
결론:왜 Apple은 이를 포착하지 못했는가?
이 버그가 어떻게 해결되었는지 이해하려면 Apple의 입장이 되어야 합니다. 물론, 이 문자 조합은 텔루구어에서 매우 모호한 단어가 아닙니다. 그러나 iPhone에는 수십 가지 언어에 대한 지원이 포함되어 있습니다. 유니코드에는 문자 그대로 수십억 개의 잠재적 조합이 있습니다. 이렇게 다양하고 의미 있는 유니코드 버그 테스트는 릴리스 전에 정기적인 소프트웨어 업데이트를 기본적으로 불가능하게 만듭니다.
그러나 이 오류로 인해 많은 피해가 발생해서는 안 됩니다. 전화는 문자 메시지의 내용에 따라 벽돌이 되어서는 안 됩니다. 돌이켜보면 확실히 20/20이지만, Springboard를 충돌시키는 것보다 캐릭터를 물음표 상자(�)로 렌더링하는 것이 더 나을 것 같습니다.