StackOverflow:n suosituimmassa Java-koodiesimerkissä on virhe

Suosituin Esimerkki Java-koodista, julkaistu StackOverflowssa, päätyi virheellä, joka johtaa väärään tulokseen tietyissä olosuhteissa. Kyseinen koodi julkaistiin vuonna 2010, ja siihen on kertynyt yli tuhat suositusta, ja se on myös ollut kopioitu monissa projekteissa ja näkyy GitHubin arkistoissa noin 7 tuhatta kertaa. On huomionarvoista, että virhettä eivät löytäneet käyttäjät, jotka kopioivat tätä koodia projekteihinsa, vaan neuvon alkuperäinen kirjoittaja.

Kyseinen koodi muunsi tavun koon luettavaan muotoon muuntaen esimerkiksi 110592:ksi "110.6 kB" tai "108.0 KiB". Koodia ehdotettiin logaritmioptimoiduksi versioksi aiemmin ehdotetusta neuvosta, jossa arvo määritettiin perustuen alkuperäisen arvon peräkkäiseen jakoon silmukassa luvuilla 1018, 1015, 1012, 1019.
106, 103 ja 100, kunhan jakaja on suurempi kuin alkuperäinen tavun arvo. Optimoidun version huolimattomista laskelmista (pitkän arvon ylivuoto) johtuen erittäin suuria lukuja (eksatavuja) käsiteltäessä tulos ei vastannut todellisuutta.

Neuvon kirjoittaja yritti myös kiinnittää huomion esimerkkien kopioimisen ongelmaan lähteen mainitsematta ja lisenssiä mainitsematta. Aikaisempien tietojen mukaan tehnyt tutkimusta 46 % kehittäjistä kopioi koodin StackOverflowsta ilman attribuutiota, 75 % ei tiennyt, että koodi oli lisensoitu CC BY-SA:n alaisuudessa, ja 67 % ei tiennyt, että tämä vaati nimeämisen.

Päälle Mukaan Toisen tutkimuksen mukaan koodiesimerkkien kopioimiseen liittyy koodin virheriskin lisäksi myös haavoittuvuuksia. Esimerkiksi analysoituaan 72483 69 C++-koodiesimerkkiä StackOverflowssa tutkijat tunnistivat vakavia haavoittuvuuksia 0.09 esimerkissä (mikä on 2859 %), jotka sisältyivät suosituimpien suositusten luetteloon. Sen jälkeen analysoituaan tämän koodin läsnäoloa GitHubissa paljastui, että StackOverflowsta kopioitu haavoittuva koodi oli läsnä XNUMX projektissa.

Lähde: opennet.ru

Lisää kommentti