A flaky test exposed a Redis client use-after-free
Des tests flakys ont commencé à échouer après une mise à jour de la gem Redis, bloquant la branche principale et poussant l'équipe à exclure temporairement certains tests. Après des investigations initiales axées sur des conditions de concurrence, l'équipe a constaté que des commandes subscribe atteignaient ActionCable mais n'étaient pas reçues par Redis, et des erreurs inhabituelles de double free sont apparues. Un core dump obtenu grâce à un plugin a permis d'identifier un crash dans le code hiredis (extension C) avec un appel à memmove utilisant une taille manifestement corrompue, suggérant une corruption mémoire. En reconstruisant Ruby avec ASAN, les ingénieurs ont rapidement détecté un use-after-free causé par la coexistence de threads lecteur et écrivain où le thread lecteur libérait le buffer du writer. L'équipe a désactivé l'extension C pour Redis et créé un test reproductible signalé en amont, et attribue la résolution au croisement d'outils adéquats, d'une bonne méthode et d'un peu de chance.