L’extrait de code Java le plus copié sur Stack Overflow contient un bogue
et son auteur, Andreas Lundblad, développeur Java chez Palantir, propose un correctif
Une étude publiée en octobre 2018 dans la revue Empirical Software Engineering par les universitaires Sebastian Baltes et Stephan Diehl a révélé qu’un extrait de code fourni en réponse à une question Stack Overflow en septembre 2010 par Andreas Lundblad, développeur Java chez Palantir, est l’extrait de code Java le plus copié sur la plateforme communautaire. Cependant, dans un billet publié la semaine dernière, Lundblad a expliqué que le code était défectueux et qu'il convertissait de manière incorrecte le nombre d'octets dans des formats lisibles par l'homme.
1 2 3 4 5 6 7
| public static String humanReadableByteCount(long bytes, boolean si) {
int unit = si ? 1000 : 1024;
if (bytes < unit) return bytes + " B";
int exp = (int) (Math.log(bytes) / Math.log(unit));
String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp-1) + (si ? "" : "i");
return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre);
} |
code contenant le bogue
L'extrait de code publié par Lundblad convertit le nombre d'octets, par exemple 123 456 789 octets, dans un format qui est lisible par l'homme, comme 123,5 Mo. Les universitaires ont constaté que ce code avait été copié et intégré dans plus de 6000 projets Java GitHub, plus que tout autre extrait de code Java sur Stack Overflow. Mais, Lundblad a dit qu'il avait revu le code après avoir pris connaissance de l'article universitaire et de ses résultats, ce qui lui a permis de se rendre compte de l'existence du bogue. Il a publié une version corrigée du code sur son blog.
Lundblad a expliqué que le code contenait un bogue de conversion trivial qui n'a abouti qu'à des estimations de taille de fichier légèrement inexactes. Cela dit, l’on estime que cela aurait été bien pire que cela. Le code aurait pu contenir une faille de sécurité, par exemple. Si c'était le cas, il aurait fallu des mois ou des années pour réparer toutes les applications vulnérables, ce qui aurait exposé les utilisateurs à des attaques. Des études ont démontré qu’il n’est pas recommandé de copier et coller du code à partir des sites spécialisés, mais les développeurs le font toujours.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| // From: https://programming.guide/worlds-most-copied-so-snippet.html
public static strictfp String humanReadableByteCount(long bytes, boolean si) {
int unit = si ? 1000 : 1024;
long absBytes = bytes == Long.MIN_VALUE ? Long.MAX_VALUE : Math.abs(bytes);
if (absBytes < unit) return bytes + " B";
int exp = (int) (Math.log(absBytes) / Math.log(unit));
long th = (long) (Math.pow(unit, exp) * (unit - 0.05));
if (exp < 6 && absBytes >= th - ((th & 0xfff) == 0xd00 ? 52 : 0)) exp++;
String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp - 1) + (si ? "" : "i");
if (exp > 4) {
bytes /= unit;
exp -= 1;
}
return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre);
} |
Correctif proposé par Andreas Lundblad
Le rapport d’étude de 2018 a montré à quel point cette pratique était répandue dans l'écosystème Java. Il a aussi indiqué que la grande majorité des développeurs qui copiaient les réponses populaires de Stack Overflow n'ont même pas pris la peine de mentionner leur source. Cette pratique démontre le fait que de nombreux développeurs de logiciels qui copient du code sur Stack Overflow sans attribution cachent effectivement aux autres programmeurs qu'ils ont introduits un code qui n’a pas été validé par l’équipe de développement dans un projet.
Un autre rapport publié cette année, en octobre, estime également que copier du code sur des plateformes spécialisées et l'utiliser pour ses propres projets peut les rendre vulnérables. Le rapport a été publié par six chercheurs en informatique issus de l'Université de Shiraz en Iran, de l'Université polytechnique de Montréal au Québec et de l'Université Chamran en Iran. Le rapport des universitaires cherchait à comprendre la nature et la prévalence des vulnérabilités en matière de sécurité dans les exemples de code en C++ partagés.
« Dans les sessions de collaboration impliquant plusieurs codeurs humains, nous avons évalué manuellement les vulnérabilités de sécurité de chaque fragment de code conformément aux instructions de CWE (Common Weakness Enumeration). Parmi les 72 483 extraits de code examinés utilisés dans au moins un projet hébergé sur GitHub, nous avons trouvé un total de 69 extraits de code vulnérables classés dans 29 types. Beaucoup d'extraits de code étudiés ne sont toujours pas corrigés », ont déclaré les chercheurs dans leur rapport.
Les 69 extraits de code vulnérables trouvés sur Stack Overflow ont été réutilisés dans un total de 2859 projets GitHub. Pour améliorer la qualité des extraits de code partagés sur Stack Overflow, ils ont développé une extension de navigateur qui permet aux utilisateurs de Stack Overflow de rechercher les vulnérabilités dans les extraits de code lorsqu'ils les téléchargent sur la plateforme. Toutefois, malgré les mises en garde des chercheurs, les développeurs copient toujours du code de Stack Overflow vers leurs projets sans pour autant procéder à une analyse.
Ashkan Sami, professeur agrégé d'informatique, d'ingénierie et de technologie de l'information à l'Université de Chiraz en Iran, a déclaré que la recherche représentait une tentative pour examiner comment le code défectueux migre de Stack Overflow vers GitHub. « En gros, ce que nous avons essayé de montrer, c’est que le fait d’utiliser du code de Stack Overflow sans l’examiner attentivement peut conduire à des vulnérabilités au sein des applications », a déclaré Sami. L’étude fait également référence à un article académique datant de 2017.
Selon cet article, 1161 extraits de code non sécurisés publiés sur Stack Overflow avaient été copiés et collés dans 1,3 million d'applications Android disponibles sur Google Play.
Sources : Résultat de l’étude, Rapport de l’étude (PDF), Andreas Lundblad
Et vous ?
Qu'en pensez-vous ?
Copiez-vous aussi du code sur Stack Overflow pour vos projets de développement ?
Peut-on s'en passer ? Si non, comment éviter de rendre vulnérable son application ?
Voir aussi
Copier du code sur des plateformes spécialisées et l'utiliser pour ses propres projets peut les rendre vulnérables, d'après une étude
Microsoft évoque le futur de C++/CLI et de .NET Core : C++ sera disponible sur .NET Core 3.1 pour Windows
La première version finale de Nim, le langage doté d'un transcompilateur vers C, C++, JavaScript est disponible avec des ajouts
Partager