Mac OS X + hostname mal encodé = bug

Je ne tombe pas souvent sur des bugs dans Mac OS X, mais quand c'est le cas ils sont en général assez gratinés. Celui là n'est pas très grave, même si il peut s'avérer tout à fait horripilant.

Avec l'internationalisation à venir des noms de domaine (rfc 3490 et 4185), les systèmes sont obligés de s'adapter côté client et côté serveur. Comme à chaque fois qu'on introduit, par exemple, des accents dans la vision anglosaxonne de l'informatique, on se retrouve avec des problèmes d'encodage. Pas d'exception ici.

Certains DHCP facétieux acceptent les noms de machine avec des accents. C'est ainsi qu'à un retour de vacances, j'ai hérité d'une nouvelle IP, à la quelle est associé un nom de machine contenant la chaîne "aurélia". Joli prénom, joli accent. Résultat, les applications Mail et NetInfo Manager se sont mises à marcher de travers. Voyons comment cela se produit.

Pour reproduire le bug il n'est pas nécessaire de se lancer dans l'installation d'un serveur DHCP, un bon éditeur de texte suffit.
La première étape consiste à s'octroyer un nom de machine avec un accent mal encodé (ie. encodé en autre chose que de l'UTF-8). On peut utiliser par exemple BBEdit ou SubEthaEdit pour créer un fichier ne contenant qu'un mot accentué, et sauvegardé en ISO Latin 1 ou Mac OS Roman. Probablement que n'importe quel encodage provoque le bug, sauf l'UTF-8.

Dans le terminal on peut alors charger notre nouveau nom de machine après être passé root :

$ sudo -s
# file nom_host 
nom_host: ISO-8859 text, with no line terminators
# hostname `cat nom_host` 

Dans une autre fenêtre de terminal (non-root), on peut alors passer à la seconde étape : lancer les appli dont on sait qu'elles sont atteintes par le bug :

$ cd /Applications/Utilities/
$ ./NetInfo\ Manager.app/Contents/MacOS/NetInfo\ Manager -errorLogLevel 7
2006-04-16 16:41:36.686 NetInfo Manager[627] Exception raised during posting 
of notification. Ignored. exception: *** -[NSCFArray insertObject:atIndex:]: 
attempt to insert nil

Et paf. NetInfo Manager ne parvient pas à ouvrir la base NetInfo locale. Si on tente ensuite d'utiliser le menu "Domain/Open..." on constate une nouvelle erreur :

2006-04-16 16:42:55.813 NetInfo Manager[627] *** -[NSCFArray 
insertObject:atIndex:]: attempt to insert nil

Pour l'application Mail, le comportement est bien plus étrange :

  • Il est impossible de répondre à certains messages, la fonction de réponse ne fonctionne pas, quelque soit le mode d'invocation (clavier, menu, bouton).
  • Il est possible de répondre à d'autres messages, mais le contenu de la fenêtre de réponse est vierge de toute citation et signature. C'est le cas par exemple des messages avec pièce jointe.
  • D'autres messages ne sont pas du tout touchés par ce bug.

Voici ce que l'on peut observer dans le terminal :

$ /Applications/Mail.app/Contents/MacOS/Mail -errorLogLevel 7

Tentative de réponse à un mail, la fenêtre de réponse ne s'ouvre pas :

2006-04-16 16:46:16.249 Mail[664] *** -[NSCFArray insertObject:atIndex:]: 
attempt to insert nil

Tentative de réponse à un message avec pièce jointe, la fenêtre de réponse est vierge :

2006-04-16 16:46:25.398 Mail[664] Exception raised during monitored invocation 
of _generateWebArchiveFromOriginalMessagesSetupForViewAndContinue:continueFinalSetupTarget:, 
exception: *** -[NSCFArray insertObject:atIndex:]: attempt to insert nil

On pourrait se dire que le bug est facile à éviter : si un DHCP vous attribue une IP qui résout en un nom de domaine avec accent mal encodé, il suffit de régler la machine pour prendre un autre nom par la commande hostname. Il n'en est rien. Pour que le bug se manifeste, il suffit qu'une des IP de la machine soit associée à un nom de domaine mal encodé dans le DNS de référence. Même si ce nom n'est pas utilisé par la machine.

Related posts

One comment

  1. Je complète l'article par la version originale de mon bugreport, un p'tit coup de pouce aux anglophones qui rencontrent ce bug sans savoir d'où il sort :

    summary:

    In some environment a computer can happen to inherit an hostname from a Domain Name Server (ie. you do not choose it, and you have no control on it). If this hostname is not well encoded and contains some high ASCII characters, the system might be unable to run properly some apps (Mail, NetInfo Manager...).

    Step to reproduce:

    1- craft a "broken hostname": use your favorite text editor to create a document with an hostname containing an accent, like "aurélia" for example.
    Save this document in windows latin 1 or mac roman encoding (both are known to break something, UTF8 works great and does not break anything)

    2- set this hostname on the computer:
    As root, run this command in a terminal window:
    hostname `cat my_hostname_file`
    where "my_hostname_file" is the file containing the specially crafted hostname.

    3- invoque NetInfo Manager in the terminal to display some debugging informations:
    cd /Applications/Utilities/NetInfo\ Manager.app/
    ./Contents/MacOS/NetInfo\ Manager -errorLogLevel 7

    4- You can already read an error in the terminal window. And you'll find out that you can't use the "Open..." menu item, nor the "Open by tag..." menu item.
    Mail.app shows also weird behaviour. With a specially crafted hostname, you can be absolutely unable to reply some email messages, and for other messages, the reply window will be empty from quote and signature.

    Expected results:

    all apps should behave correctly with any hostname, or, the system should not allow an hostname to be encoded in latin1,mac roman, ...

    Actual results:

    Some applications shows error when launched or used, if the hostname in encoded in latin1 or macroman:
    # file host
    host: ISO-8859 text, with no line terminators
    # hostname `cat host`

    with netinfo:

    $ /Applications/Utilities/NetInfo\ Manager.app/Contents/MacOS/NetInfo\ Manager -errorLogLevel 7
    2006-04-16 16:41:36.686 NetInfo Manager[627] Exception raised during posting of notification. Ignored. exception: *** -[NSCFArray insertObject:atIndex:]: attempt to insert nil
    (here I try to use the "Domain/Open..." menu item:)
    2006-04-16 16:42:55.813 NetInfo Manager[627] *** -[NSCFArray insertObject:atIndex:]: attempt to insert nil

    with Mail:

    $ /Applications/Mail.app/Contents/MacOS/Mail -errorLogLevel 7
    (here I try to reply a mail, the reply window won't open:)
    2006-04-16 16:46:16.249 Mail[664] *** -[NSCFArray insertObject:atIndex:]: attempt to insert nil
    (here I try to reply a mail including an attachment, the reply window opens but is blank, no signature, no quote:)
    2006-04-16 16:46:25.398 Mail[664] Exception raised during monitored invocation of _generateWebArchiveFromOriginalMessagesSetupForViewAndContinue:continueFinalSetupTarget:, exception: *** -[NSCFArray insertObject:atIndex:]: attempt to insert nil

    note that not all mails will give these results, NetInfo Manager is an easier way to reveal the bug.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.