Το χρονικό ενός κρίσιμου regression
Στις εκδόσεις του Android 17 από τον Σεπτέμβριο του 2026, παρατηρήθηκε μια μη αναμενόμενη συμπεριφορά στις συναρτήσεις wcscspn() και wcspbrk(). Συγκεκριμένα, οι συναρτήσεις αυτές σταματούν πρόωρα τη σάρωση σε οποιονδήποτε χαρακτήρα με κωδικό σημείο (code point) μεγαλύτερο ή ίσο του U+0100, εφόσον το σύνολο αναζήτησης περιλαμβάνει τουλάχιστον δύο χαρακτήρες ASCII. Το πρόβλημα αυτό επηρεάζει άμεσα εφαρμογές που επεξεργάζονται κείμενο με υποστήριξη Unicode, όπως lexers και συστήματα διαχείρισης αρχείων.
Ανάλυση μέσω απομεταγλώττισης (decompilation)
Λόγω της καθυστέρησης στη διάθεση του πηγαίου κώδικα για τις συγκεκριμένες εκδόσεις του Android, οι μηχανικοί αναγκάστηκαν να προχωρήσουν σε απομεταγλώττιση του libc.so. Η ανάλυση του assembly κώδικα αποκάλυψε ένα λογικό σφάλμα στη διακλάδωση που διαχειρίζεται τα σύνολα αναζήτησης. Ο κώδικας, αντί να συνεχίσει τη σάρωση όταν συναντά χαρακτήρα >= U+0100, τον αναγνωρίζει λανθασμένα ως ταίριασμα (match), διακόπτοντας τη διαδικασία.
Επιπτώσεις στο οικοσύστημα και workarounds
Το πρόβλημα δεν είναι θεωρητικό, καθώς έχει ήδη προκαλέσει αστοχίες σε εφαρμογές όπως το Visual Pinball, όπου η χρήση του wcspbrk για τον εντοπισμό αλλαγών γραμμής αποτυγχάνει μόλις εμφανιστεί ένα emoji ή χαρακτήρας εκτός του ASCII εύρους. Η προσωρινή λύση (workaround) που υιοθετήθηκε από την κοινότητα περιλαμβάνει την αντικατάσταση των εν λόγω συναρτήσεων με χειροκίνητους βρόχους (loops), γεγονός που υπογραμμίζει την ανάγκη για ταχύτερη διαφάνεια στον πηγαίο κώδικα του AOSP.