Мой баг дня (записки тестировщика)
243 subscribers
169 photos
23 videos
11 files
126 links
Precondition:
Repro steps:
1. ...
2. ...
3. ...
Expected: good
Actual: bad

Связь: @MyachinDA
Download Telegram
Классика — опечататься в названии компании. Это 2013 год. С тех пор, вроде, такого не встречалось.
Но я не об этом. Сейчас расскажу об одном более-менее интересном баге, который нашёл буквально вслепую. Она была в коде, который считался недостижимым (Unreachable code).

Возможно кто-то из вас помнит про очень старую уязвимость у многих производителей Android прошивок. Она была связана с USSD кодом *2767*3855#. Этот код вызывал hard reset огромного множества устройств без подтверждения пользователя. То есть можно было на сайте разместить ссылку <frame src="tel:*2767*3855%23" /> и при заходе на страничку телефон сразу форматировался.

Многие производители как прошивок, так и security решений срочно выпустили маленькие приложения, которые становились звонилками по умолчанию. Всё, что они делали — не прокидыали именно этот USSD в системную звонилку, а всё остальное прокидывали молча. Проксировали, в общем.

Лаборатория не стала делать отдельную утилиту, а выпустила обновление антивируса с такой функциональность.

Прошло несколько лет. Уязвимых прошивок больше не осталось, код прокси-звонилки стал не нужен. Выбрасывать что-то куском всегда рисковано и в первом приближении решили просто отключить все вызовы этой псевдозвонилки.

Раскатали релиз, всё шло хорошо. В следующем релизе убрали и прокси-звонилку. И всё и дальше шло бы хорошо, если бы через какое-то время Google не представил супер новую невиданную ранее фичу — Okay Google. И пошли редкие, но достаточно стабильные падения в вызове кода, который нельзя было вызвать. А падало потому что и кода уже не было.

Поставили мне задачу понять, как это происходит. Как вообще людям удаётся достать недостижимый код. Я пробовал и по ссылка tel: тыкать, и в SMS их присылал, и звонилки разные пробовал, и USSD код этот вызывал. Пока не сказал Okay Google call one one two. И продукт упал.

Этот код вызывался в сценарии, которого вообще не существовало во время его написания. Он вызывался только через Окей Гугл. Ассистент (тогда ещё не было Ассистента, до его появления было ещё несколько лет, но пусть будет он) дёргал вызов, который пропустили при вырезании этой фичи.

Фикс был очень простым и быстрым. А вот его обнаружение было тем ещё развлечением.

И нет, по стек трейсу нельзя было понять, как именно происходил вызов. Там лишь было падение из-за того, что есть обращение к тому, чего быть не должно. Можно было бы просто обернуть это исключение, но это костыль, а не решение проблемы.

Любой тестировщик со временем начинает мыслить очень творчески. Это помогает.
Я не умер, я в отпуске. А потому короткая история о том, как делать не надо.
В свой первый отпуск 10 (или уже 11?) лет назад я ушёл, подложив говна под дверью команды, образно говоря.
В день подписания релиза, когда высокоприоритетных ошибок уже не было, я решил проверить, что будет, если отправлять в драйверы продукта некорректные вызовы.
Сейчас мне очевидно, что это была хоть и правильная проверка, но не вовремя. Такое нужно делать сильно заранее.
В общем, эти тесты отправляли XP в синяк. Я записал баг высокого приоритета (а это стоп релиза), встал из-за стола, взял рюкзак и свалил.

Потом узнал, что меня искали, чтобы объяснить мне, что делать так не очень хорошо и что если уж нашёл что-то такое в столь поздние сроки, то будь добр, донеси это до команды сначала.

Не повторяйте моих ошибок, не хреначте стопари без объявления войны. Да, для вас качество должно быть на первом месте, но не всегда найденная ошибка должна останавливать релиз. Иногда разумнее перенести баг на патч, если вы с ними работаете. Называется это "патч нулевого дня". То есть даже пусть в релизном билде будет сценарий, при котором кровь кишки, при патче нулевого дня клиент с этой ошибкой не столкнётся.

Баг был в Windows XP самом, кстати. Драйвер лишь дал возможность на него напороться. Фикс был в банальном запрете этого вызова.
Мир свернул сильно не туда, когда дал управление маркетологам и продажникам. Да, понятно, что все хотят денег (и я, и вы), но всё же нужно знать меру.
Это скриншот сетевых запросов от браузера, когда пользователь пытается прочитать Privacy Statement для продукта, который собирается использовать.
Это не ошибка, всё здесь "правильно". Я специально писал письмо со своим недовольством по такому поведению, но нет, здесь всё юридически честно и чисто.

Но меня это всё равно печалит. Неправильно это. Неправильно не конкретно из-за компании, а неправильно вообще, в общем и в целом. Ведь так делают вообще все.
Все, кто хотел, прошли дополнение ко второй (в современном перезапуске) Ларе про Бабу Ягу? Там есть такая ачивка, описание которой меня расстроило. Точнее, перевод на русский язык:
https://pbs.twimg.com/media/DX86STNWAAAdODo.jpg:large
Ну и чтобы два раза не вставать: https://pbs.twimg.com/media/DMrxy7FXcAAMS6n.jpg:large AAA игра от главного игродела Сони. И такой фейл — отпечаток протектора не зависит от рисунка протектора.
Баг, который я писал на самых разных проектах, которым помогал. Просто потому что раньше об этом не задумывались.
Ни одно ваше приложение не может отправлять никаких статистик и не делать никаких сетевых запросов (и вообще работать) до того, как пользователь примет EULA. Следите за этим в своих тестах.

Ну и можете сделать обратное — сниффать трафик других приложений и если видите, что они делают сетевые запросы до принятия соглашений, хватать их за жопу и таскать по судам. И я даже не шучу.
Откопал баг уровня "олды помнят" (хотя не особо и олды, конечно).
Сам баг:
Закрыт с комментарием:
3.0 — это даже не Vista. Это уровень Windows ME.
В Android 9 вы можете частично менять системе тему — тёмную или светлую. Это же поддерживают некоторые приложения от Google. Так вот вы поставили тёмную тему, а теперь хотите вернуть светлую, а она не возвращается, хотя уже и обои светлые, и в настройках поставили светлую тему — а строка уведомлений и "шторка" всё ещё тёмные. Почему?
Потому что баг логики. Кто бы сомневался. В общем, если в приложении SMS гугловском вы явно выставите тему, то эта настройка будет перекрывать настройку системы и не только для этого же приложения, а для самой системы.
Да что вы знаете о безопасности?!
Гугл раскатил обновление для Андроид Пэй. Теперь вам не нужно разлочивать устройство перед прикладыванием телефона к терминалу. Достаточно, чтобы экран был включен.

И здесь совершенно точно речи о том, что телефон просто успел распознать лицо не идёт. Я заблокировал устройство вручную, через Lockdown (на современных версиях: удержание кнопки питания → появляется менюшка), а при оплате отвернул телефон экраном к терминалу и нажал на кнопку питания, чтобы экран включился. Оплата сразу прошла. Это точно не отпечаток, т.к. он у меня не на кнопке питания, а на спине устройства.

То есть если раньше нелья было прислонить терминал к карману, потому что до разблокировки ничего не работало, то теперь можно попытаться. Телефоны в карманах не так уж редко включают экраны из-за ложных нажатий на кнопку питания.

Это реально очень спорное изменение. Да что там, оно глупое, оно не безопасное!
Обновление Google Clock до 6.1 добавляет поддержку YouTube Music в него. Теперь на будильники можно ставить плейлисты.
Если сразу не согласились на установку YT Music (запрос понимается при первом выборе мелодий будильника), то опция установки доступна из правого верхнего меню.
Мой баг дня (записки тестировщика)
Да что вы знаете о безопасности?! Гугл раскатил обновление для Андроид Пэй. Теперь вам не нужно разлочивать устройство перед прикладыванием телефона к терминалу. Достаточно, чтобы экран был включен. И здесь совершенно точно речи о том, что телефон просто…
В Твиттере мне сказали, что это было давно уже, на самом деле.
Решил проверить, на какую сумму действует такой подход. Как раз закончил ремонт в квартире и покупаю всякое. Так вот при покупке люстры за 3500 Google Pay потребовал подтвердить, что это я — показал запрос пароля (хотя и принял просто отпечаток в итоге).

Видимо ограничение у такой операции такое же, как и оплата без PIN кода по обычной карте — у кого 1000 рублей, у кого 1500 рублей.

В общем, это поведение дублирует обычное поведение PayPass/PayWave.

К слову, если вдруг кто не знал. Даже если у вас чиповая карта (а у кого она не такая?), магазин вполне может провести операцию и без PIN кода, если у карты выставлен приоритет подписи. Если вы где-то с таким столкнулись — купили что-то тысячи на 3, а пин не потребовался, то позвоните в банк и попросите сменить приоритет на пиновый. Ну или просто так позвоните и спросите, приоритет чего именно у вас.