Bon. Petit update si y'a des gens que ça intéresse.
Le bug ne se produit qu'avec mingw 32 bits, pas en 64 bits. Donc ça pue une conversion implicite int/int32_t/size_t/ptrdiff_t quelque part qui foire. Sauf que j'ai beau tourner et retourner le code, je trouve pas.
Donc je vais voir si je reproduis sur une Debian 32 bits : si oui, j'aurai un environnement de dév digne de ce nom pour débuguer (ne serait-ce qu'un sanitizer et un GDB) ; si pas de bug, j'abandonne, et fuck Windows 32 bits.