Pour les corrections d'ints overflows (et autres joyeuses imprécisions dans l'utilisation des entiers), j'ai vu passer des centaines de patches ces derniers mois dans les logs cvs. Donc un petit coup d'oeil sur leur cvsweb t'en dira plus (désolé, je n'ai pas noté les urls de chaque commit ;).
Celà a certainement un rapport avec le refactoring de lint(1), qui sait maintenant repérer ce type d'erreur sans trop de fausses alertes, et qui a révélé un paquet d'erreur (là encore, l'aide de lint était souvent indiquée dans les logs cvs), et révéillé l'attention des développeurs à la fragilité du code sur ce point, entrainant un réaudit plus fin/manuel.
void mafunc(int arg);
int x, y;
[...]
mafunc( x * y ) ; /* baboum, x*y ne tient peut-être pas dans un entier ! */
qui fait particulièrement mal lorsque mafunc() est en fait malloc(). C'est pourtant un truc qu'on trouve courrament dans du code, lorsqu'on fait malloc( n * sizeof(obj) ) pour allouer "n" objet "obj".
[^] # Re: Autres nouveautés
Posté par herodiade . En réponse à la dépêche Sortie d'OpenBSD 3.9. Évalué à 4.
Celà a certainement un rapport avec le refactoring de lint(1), qui sait maintenant repérer ce type d'erreur sans trop de fausses alertes, et qui a révélé un paquet d'erreur (là encore, l'aide de lint était souvent indiquée dans les logs cvs), et révéillé l'attention des développeurs à la fragilité du code sur ce point, entrainant un réaudit plus fin/manuel.
Pour le "vilain malloc(x*y)", je fait référence à un article publié le mois dernier par un dev d'OpenBSD, "Multiplication Considered Harmful" ( http://undeadly.org/cgi?action=article&sid=2006033007191(...) ).
En gros:
void mafunc(int arg);
int x, y;
[...]
mafunc( x * y ) ; /* baboum, x*y ne tient peut-être pas dans un entier ! */
qui fait particulièrement mal lorsque mafunc() est en fait malloc(). C'est pourtant un truc qu'on trouve courrament dans du code, lorsqu'on fait malloc( n * sizeof(obj) ) pour allouer "n" objet "obj".