A falta de um simples caractere fez estragos no código do Chrome OS: o símbolo “&” ou a falta dele impede o acesso aos arquivos locais no sistema do Google. Foi um simples erro de digitação no código que causou a falha no sistema.
Na última segunda-feira, 19 de julho, o Google lançou uma atualização para seu sistema operacional Chrome OS, 91.0.4472.165, que rapidamente começou a causar problemas aos usuários: os impediu de fazer login em seus sistemas. O Google interrompeu imediatamente a implantação quando afetou os usuários que haviam reiniciado seus computadores após o download da nova versão.
A estes últimos só poderiam ser oferecidas soluções para recuperar o acesso ao seu sistema que inevitavelmente passava pela exclusão dos dados locais no dispositivo (reverter o dispositivo para uma versão anterior via USB, restaurar o status de fábrica ou excluir e recriar a conta do usuário).
No entanto, o interessante sobre essa atualização problemática (e, claro, já corrigida), tem a ver com o motivo da falha. Não se trata de uma corrupção de algum arquivo do sistema, nem de uma vulnerabilidade de kernel estranha e complexa. Todo o problema se resume à falta do caractere “&” no código. O estranho sobre o erro não é que tenha sido cometido, é que seus efeitos não foram detectados.
Ausência de um simples “&” no código causa falha grave no Chrome OS que impede o acesso aos arquivos locais
Sim, o caractere conhecido em inglês como ‘e comercial’, usado como substituto da palavra ‘e’, também é um operador fundamental na maioria das linguagens de programação. O problema com esta atualização foi causado por uma revisão de código que removeu inadvertidamente um desses operadores no seguinte snippet de código C ++:
if (key_data_.has_value() && !key_data_->label().empty())
Nada impediu a compilação do código, porque o código ainda faz sentido, mesmo alterando “&&” para “&” simplesmente, o comportamento do software varia completamente .
Assim, onde “&&” é um operador AND lógico que atua como uma forma de indicar que duas ou mais condições devem ser atendidas simultaneamente para executar uma opção, “&” torna-se um operador AND bit a bit: compara os bits um a um, se ambos forem “1” o resultado é “1”, caso contrário, “0”.
Isso significa que “&” avalia ambos os lados da operação, enquanto “&&” avalia o primeiro elemento da operação e, somente se for ‘verdadeiro’, continua e avalia o segundo elemento.
Devido a esse bug, o Chrome OS atualizado nunca conseguiu verificar corretamente as senhas dos usuários em relação às chaves armazenadas, portanto, mesmo quando as senhas corretas foram inseridas, o SO retornou a mensagem “Desculpe, não foi possível verificar sua senha”.
Resta saber como o erro pode ter acontecido ao Google: o Chrome OS, assim como o navegador Chrome, tem três canais de teste (‘Canary’, ‘dev’ e ‘beta’) com semanas de diferenciação de testes entre as versões, o que deve ajudar você detecta bugs tão óbvios quanto este antes de passar para o canal estável. Na verdade, um teste de unidade automatizado também deveria ter detectado.
Em qualquer caso, este é um ótimo exemplo de como os piores erros de programação podem ser causados por uma coisa tão simples como um caractere.
Via Genbeta