The effective power bug

Sui primi computer inventati nei paesi anglofoni bastavano sette bit per poter codificare tutti i segni tipografici: lettere dell’alfabeto maiuscole e minuscole, numeri, operazioni matematiche, interpunzione.

Quando i computer si sono diffusi negli altri paesi che usano l’alfabeto latino, sono arrivate le prime complicazioni, dato che qui si usano anche lettere accentate.

Per poter visualizzare testi in greco o in russo c’è bisogno di aggiungere il supporto per alfabeti completamente diversi.

Ma se vogliamo vedere testi in arabo o in ebraico si aggiunge un’altra complicazione, visto che le lettere vanno disposte da destra a sinistra.

L’altro giorno ho cercato Gengis Khan su Wikipedia, e l’articolo conteneva il suo nome scritto in mongolo. E la scrittura mongola procede dall’alto in basso. Quindi non solo il browser ha dovuto mettere le lettere nella posizione giusta, ma ha anche dovuto aumentare l’interlinea per fare spazio alla parola. Senza contare il fatto che il cursore e il puntatore del sistema operativo quando interagiscono con la scrittura mongola pure devono ruotare di 90 gradi.

E più lingue devono essere aggiunte e più ci si trova di fronte a cose inaspettate: lettere che si costruiscono combinando insieme vari glifi, diacritici che si aggiungono a qualunque lettera precedente senza far avanzare il cursore e così via.

Per gran parte della gente tutto ciò non ha importanza, visto che magari scrive solo in lingue latine, ma per i programmatori è fondamentale che ogni software sia in grado di gestire e visualizzare correttamente qualsiasi testo.

Ad esempio, ogni pagina di Wikipedia contiene la traduzione della parola cercata in tutte le lingue conosciute, quindi il browser si trova a che fare tutte le volte con byte riconducibili alla scrittura devanagari o a quella degli aborigeni canadesi.

Nel peggiore dei casi, una combinazione di byte imprevisti può portare a far crashare il programma o addirittura il sistema operativo.

È successo varie volte che la cosa è finita sui giornali: si era scoperto che bastava inviare alcuni caratteri in una lingua sconosciuta con un semplice messaggio sul cellulare per bloccare completamente il cellulare stesso.

I programmatori dovevano essere messi immediatamente al lavoro per cercare di capire quale era la causa e mettere a punto un aggiornamento con le contromisure nel giro di poche ore, per evitare danni agli utenti.

Nove anni fa Tom Scott, uno degli youtuber più popolari al mondo (oltre 6 milioni di iscritti al canale), ha dedicato un video di 3 minuti, in inglese, all’ultimo bug che era stato individuato, che mandava in tilt gli iPhone. Era chiamato Effective Power dalle prime due parole che comparivano nel messaggio, le uniche composte di lettere latine.

Ancora non circolavano i dettagli, quindi lo youtuber cercava di dedurre qualcosa sulla base di quello che era stato annunciato fino a quel momento.

Non era la visualizzazione del messaggio nell’app a mandare in tilt il telefono, ma la sua comparsa tra le notifiche, dove comparivano soltanto i primi caratteri del messaggio.

Il bug riguardava il punto in cui il messaggio veniva tagliato per ottenere l’anteprima, e non mandava in tilt tutti i telefoni, ma solo quelli che avevano particolari impostazioni riguardanti la grandezza dei caratteri dell’anteprima e le dimensioni dello schermo.

Il taglio del messaggio per ottenere l’anteprima non avveniva dopo un numero fisso di byte. Non avrebbe senso, visto che le lettere latine occupano un byte ciascuna, quelle greche ne occupano due, quelle cinesi tre e le emoji quattro o più.

Si deve tenere conto della larghezza delle lettere.

Ecco: Scott nota che in arabo quando si aggiunge una lettera non è detto che la parola diventi più larga, perché la nuova lettera si fonde con la precedente ottenendo quindi una sequenza più stretta. Il messaggio conteneva parecchie lettere arabe, con l’aggiunta di diacritici che potevano forse contribuire a confondere le idee del software che doveva effettuare il taglio.

Varie volte Scott ha dovuto provare a spiegare bug simili.

6 anni fa circolava il messaggio del punto nero, in cui se si cliccava un punto nero in un messaggio l’applicazione usata crashava, su Android.

Scott spiegava che non era la presenza del punto nero a causare il crash ma la presenza di duemila byte non associati a caratteri visibili, che cambiavano più e più volte la direzione di lettura da quella da destra a sinistra a quella da sinistra a destra e viceversa.

Quando l’utente cliccava sul punto, il software non era in grado di stabilire su quale carattere di preciso si era cliccato, visto che in pratica si trovavano tutti sovrapposti, e questo bastava a mandare in tilt il programma.

Un altro bug di cui si è parlato negli anni scorsi era quello collegato con un carattere della lingua telugu usata in India che pure causava problemi al telefono.

Su Youtube c’è una dimostrazione degli effetti sulla app di Twitter. Quando la app era aperta, l’invio del carattere la faceva crashare. Quando era chiusa, la comparsa del carattere nella notifica faceva crashare l’intero sistema operativo.

Il video, in italiano, si limitava a mostrare gli effetti ma non azzardava nessuna spiegazione in proposito.

Su Serhack c’è una spiegazione più dettagliata, in inglese.

Il carattere telugu in questione in realtà è composto da cinque caratteri diversi: una consonante, un diacritico, un’altra consonante, un carattere di larghezza zero e una vocale.

È proprio il carattere di larghezza zero, che serve per tenere separate due lettere che altrimenti si unirebbero, che in questo caso veniva gestito male dal sistema, fornendo un valore non valido che causava l’interruzione indesiderata del programma.

Il bug era stato rapidamente corretto, ma qualcuno se l’era presa comunque con la Apple dicendo che avrebbe dovuto accorgersi prima del problema.

Commenti

Post più popolari