O que acontece quando passe o mouse sobre um link no Chrome?

40

Quando esse link ( http://a//%%30%30) é clicado no Google Chrome, o Chrome interrompe e fecha todas as guias e instâncias.

Mas, em alguns casos, só preciso passar o mouse sobre o link e a guia trava.

O que acontece quando passe o mouse sobre este link? Quero dizer, o que o Chrome faz quando um link passa o mouse?

LINQ
fonte
12
Aqui está um ótimo vídeo de Tom Scott que fala sobre o que ele acha que está acontecendo no chrome youtube.com/watch?v=0fw5Cyh21TE
#
5
Este bug foi corrigido no Chrome 45.0.2454.101 . Ainda estava presente no Chrome 45.0.2454.99 .
Deltik 25/09
O bug não foi corrigido no Chrome 45.0.2454.101 (pelo menos no Mac OS 10.10.5 o Chrome ainda está travando).
math

Respostas:

42

O acidente é devido a um bug descoberto recentemente no Chrome - e outros navegadores WebKit * - especificamente relacionada com qualquer um (!) %%30%30, %0%30Ou %%300como parte da URL, que internamente todos acabam representando o mesmo símbolo: nulo . Você pode ler mais sobre o bug aqui .

Não é um bug que afeta a maioria dos links; portanto, você geralmente não precisa se preocupar em passar o mouse sobre os links.

Notas:
* Outros navegadores WebKit incluem Safari, Opera, Navegador Steam, Midori, S60 (Symbian), Navegador Blackberry e navegador Playstation 3 - mas não Firefox, Internet Explorer ou Edge.

Edit: Este bug foi corrigido no Chrome 45.0.2454.101 como aponta Deltik .

Mais sobre o que acontece

O problema está relacionado ao canonicalizer de URL , que é executado assim que você passa o mouse sobre um link - possivelmente para exibir o link na barra de status do navegador e para pré - buscar a página da Web para que ela carregue mais rapidamente quando clicada.

Quanto ao papel do canonizador de URLs:
quando um URL é gravado HTML, ele pode ser gravado em um formato como /homeor ../../home, mas os navegadores precisam traduzir esse URL para algo com um protocolo e um domínio também http://superuser.com/home. Além disso, o URL pode conter Escapes de URL que precisam ser traduzidos , e esses escapes são codificados em porcentagem , como %%30%30. (Uma lista mais exaustiva de URL escapa aqui ).
A funcionalidade que trata dessa tradução de URL é o que está acabando, porque recebe informações que os desenvolvedores não esperavam / manipulavam.

Aqui está um resumo da alteração de código que corrigiu o problema:

Manipule corretamente escapadas aninhadas problemáticas nos caminhos da URL.

Especificamente, se o não escape da entrada levar ao URL de saída que contém uma nova sequência de escape, por exemplo, converter a entrada "%% 30% 30" em "% 00", escape do '%' principal como "% 25" para garantir a saída sequência não é tratada como uma nova sequência de escape válida.

Isso garante que a canonização do mesmo URL uma segunda vez não faça alterações, o que é importante para evitar falhas e outros erros em vários locais nas versões de depuração e lançamento.

miyalys
fonte
3
Para maior clareza, não há problema com o FireFox ou o IE 11
Dave
6
Considerando que o Opera é baseado no mecanismo do Chrome, não é chocante que ele também trava. Qual é a razão de ter vários mecanismos de renderização é uma coisa boa.
Ramhound 24/09
8
Mas por que isso acontece em foco ? Quero dizer, quando passo o link por um link, não há pesquisa; então, por que ele trava?
LINQ
4
Ainda não está claro o que está causando o erro, mas alguns acham que está relacionado ao URL canonicalizer, que aparentemente começa a ser executado assim que você passa o mouse sobre um link, talvez por exibir o link na barra de status do navegador? Não posso dar uma resposta certa; no entanto, quando um URL é escrito em HTML, ele pode ser escrito em um formato como /homeor ../../home, mas os navegadores precisam traduzir esse URL para algo com um protocolo e um domínio também, como http://superuser.com/home, por exemplo, talvez a manipulação de funcionalidade que está acabando falhando, porque recebe entrada inesperada?
miyalys
15
@ JéfersonBueno Quando você passa o mouse sobre um link, o Chrome o exibe no canto inferior esquerdo. Isso requer algum processamento, incluindo a "tradução" de caracteres especialmente codificados. Esse processamento é incorreto e causa uma falha no programa inteiro.
Fabio diz Restabelecer Monica
11

Como diz Fabio Turati,

Quando você passa o mouse sobre um link, o Chrome o exibe no canto inferior esquerdo. Isso requer algum processamento, incluindo a "tradução" de caracteres especialmente codificados.

No entanto, em sua postagem e comentário, acho que você está mais preocupado em saber se o Chrome se conecta ao link em segundo plano. Isso acontece com outros navegadores modernos ( Firefox , Opera ). Convém desativar a pré-busca nas preferências do Chrome ou instalar o uBlock Origin para obter mais configurações de privacidade.

jingyu9575
fonte
6

Eu queria dar mais esclarecimentos sobre o que exatamente acontece aqui.

Basicamente,% 30 é um 0 codificado por URL e% 00 é um NULL codificado por URL (que é exibido em binário como 0000 0000). Portanto, se você tiver um URL que possua um caractere codificado aninhado que decodifique para NULL, o erro ocorrerá.

O Chrome faz o seguinte ao canonizar um URL (fonte: https://code.google.com/p/chromium/issues/detail?id=533361#c13 ):

  • Uma sequência de entrada "http: //a.com/%%30%30" não é escalada para " http://a.com/%00 " e é considerada uma GURL válida.
  • Essa GURL é finalmente enviada para GURLToDatabaseURL (), que chama ReplaceComponents () para remover o nome de usuário e a senha.
  • ReplaceComponents () re-canoniza a URL.
  • A canonização do caminho atinge a sequência "% 00", desaparece, vê que este é um caractere 0 inválido nos URLs, deixa-o escapar, mas marca o URL resultante como inválido.
  • Depois que retornamos ao GURLToDatabaseURL (), ele chama .spec () na nova URL, esperando que ela seja válida, pois a URL de entrada foi garantida como válida e apenas removemos o nome de usuário e a senha. Este DCHECKs.

Portanto, o URL é considerado válido primeiro, mas após a remoção de determinados dados particulares, ele é invalidado. No entanto, após a remoção desses dados, a função que chamou esse código específico espera um URL válido.

Parte do motivo pelo qual esse URL é considerado inválido é porque NULL é usado em vários softwares e idiomas mais antigos para indicar o fim de uma string (porque são basicamente 8 zeros em uma linha, o que é fácil de detectar em um computador).

Nzall
fonte