Баг в работе Wi-Fi на iPhone отключает беспроводной модуль.
4 июля 2021 года инженер и основатель secret.club Карл Шоу (Carl Schou) рассказал в Twitter, что при присоединении любого iPhone, включая новые модели, к Wi-Fi сети с символьным названием (SSID) в виде "%secretclub%power", происходит перманентное отключение беспроводного модуля мобильного устройства. Сеть Wi-Fi перестает работать, кнопка ее включения становится неактивной. Также перестает работать AirDrop на iPhone.
Примечательно, что единственный способ восстановить работоспособность Wi-Fi на iPhone, причем и он не всегда работает, это сбросить устройство до заводских настроек с потерей текущих данных пользователя, если до активации бага не было сделано резервное копирование.
В случае, если бэкапа не было, можно сделать текущий и сбросить устройство, но для восстановления работоспособности Wi-Fi пользователю необходимо вручную отредактировать на ПК резервную копию iPhone и удалить оттуда вредоносную запись с названием сети в файле ".plist".
Эксперт отправил отчет по этому багу в Apple по официальной электронной почте, но пока что ничего от них в ответ не получил.
Один пользователь пояснил, что смог на iPad с публичной бета-версией 1 iOS 15 добиться включения сети Wi-Fi после бага, отключив в устройстве точку доступа с таким названием и нажав переключатель включения Wi-Fi примерно 30 раз. Кроме того, он предложил включить режим полета на более чем на 10 секунд и потом выключить его.
18 июня Шоу обнаружил, то при присоединении любого iPhone, включая новые модели, к Wi-Fi сети с символьным названием (SSID) в виде "%p%s%s%s%s%n", происходит зависание работы беспроводного модуля мобильного устройства. В этом случае помогал сброс настроек сети. Также иногда, но не всегда, помогает удаление названия такой сети из iCloud Keychain с другого устройства.
Шоу не советует экспериментировать с названиями сетей с символом "%" вначале и подождать патча от Apple, если компания заинтересуется этой проблемой. Пользователи рассказали, что даже такой SSID вызывает этот баг — "%Free %Coffee at %Starbucks".
Некоторые пользователи проверили подключения к сети "%p%s%s%s%s%n" на устройствах с ОС Android. Там все работает штатно без проблем.
Эксперты Bleeping Computer предположили, ошибку с Wi-Fi на iPhone, вероятно, связана с проблемой синтаксического анализа входных данных. Когда в именах точек доступа Wi-Fi присутствует строка со знаками «%», то iOS может ошибочно интерпретировать буквы, следующие за «%», как спецификаторы формата строки, хотя это не так. В языках семейства C спецификаторы формата строки имеют особое значение и обрабатываются компилятором языка как имя переменной или команда, а не просто текст. Например, команда printf на самом деле не печатает символ «%n», а сохраняет количество символов, предшествующих %n, в заранее определенной переменной.
В 2018 году пользователи iPhone столкнулись с проблемой при получении в тексте смс символов Unicode для индийского языка телугу. Проблема возникала на некоторых версиях iOS в приложениях, использующих дефолтный шрифт San Francisсo. Получив всего несколько символов ????, пользователь терял управление над многими приложениями в iOS, включая почту и Facebook. Если один из символов телугу появлялся во всплывающих уведомлениях, то блокировался SpringBoard — приложение, отвечающее за главный экран в iOS.
В 2015 году пользователи iPhone столкнулись со сбоем системы и перезагрузкой своих устройств после получения смс или пуш-сообщения со смесью арабского текста с хинди или бенгальским посередине и китайским иероглифом в конце в виде строки "?????????? ? ? h ? ? ?".
Teplo_Kota
Шёл 2021. Apple и Microsoft всё ещё не умеют Unicode.
merlin-vrn
Юникод совершенно не при чём. Вот что не умеют проверять/защищать введённые (ненадёжные) данные — это печально.
Строки вида %X используются как форматные, например, в C код типа printf("число: %i\n", 123) напечатает "число: 123" (и перевод строки). А вот если форматная строка предполагает наличие параметра (содержит %что-то), а фактически переменная (в виде адреса на стеке) не была передана в функцию типа printf — это будет, видимо, "неопределённое поведение". То есть, что угодно может быть, может и котёнок помереть.
А поэтому думать надо, что ты за строку передаёшь в функцию printf и подобные первым аргументом.