Π Π°Π·Π²ΠΈΠ²Π°ΡΠΈΡΠ΅ Π½Π° ΡΠ°Π·ΠΈΠΊΠΎΡ Rust ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΠΈΡΠ° Π΄Π΅ΠΊΠ° Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ Π½Π° crates.io Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΡΠ²Π°Π½ ΠΏΠ°ΠΊΠ΅Ρ ΠΎΠ΄ ΡΡΡΡΠ΄Π΅ΡΠΈΠΌΠ°Π»Π΅Π½ ΠΊΠΎΡ ΡΠΎΠ΄ΡΠΆΠΈ Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½ ΠΊΠΎΠ΄. ΠΠ°ΠΊΠ΅ΡΠΎΡ ΡΠ΅ Π±Π°Π·ΠΈΡΠ°ΡΠ΅ Π½Π° Π»Π΅Π³ΠΈΡΠΈΠΌΠ½ΠΈΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ rust_decimal ΠΈ Π±Π΅ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ»ΠΈΡΠ½ΠΎΡΡ Π²ΠΎ ΠΈΠΌΠ΅ΡΠΎ (typesquatting) ΡΠΎ ΠΎΡΠ΅ΠΊΡΠ²Π°ΡΠ΅ Π΄Π΅ΠΊΠ° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ Π½Π΅ΠΌΠ° Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ ΠΎΡΡΡΡΡΠ²ΠΎ Π½Π° Π΄ΠΎΠ»Π½Π° ΡΡΡΠ° ΠΏΡΠΈ ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ ΠΈΠ»ΠΈ ΠΈΠ·Π±ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΌΠΎΠ΄ΡΠ» ΠΎΠ΄ ΡΠΏΠΈΡΠΎΠΊ.
ΠΡΠ΅Π΄ΠΈ Π΄Π° ΡΠ΅ ΠΎΠ΄Π±Π΅Π»Π΅ΠΆΠΈ Π΄Π΅ΠΊΠ° ΠΎΠ²Π°Π° ΡΡΡΠ°ΡΠ΅Π³ΠΈΡΠ° ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊΠΎ ΡΡΠΏΠ΅ΡΠ½Π° ΠΈ Π²ΠΎ ΠΎΠ΄Π½ΠΎΡ Π½Π° Π±ΡΠΎΡΠΎΡ Π½Π° ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ°, ΡΠΈΠΊΡΠΈΠ²Π½ΠΈΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ Π±Π΅ΡΠ΅ ΡΠ°ΠΌΠΎ ΠΌΠ°Π»ΠΊΡ Π·Π°Π΄ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΠΎΡ (~111 ΠΈΠ»ΡΠ°Π΄ΠΈ ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ° Π½Π° rustdecimal 1.23.1 ΠΈ 113 ΠΈΠ»ΡΠ°Π΄ΠΈ ΠΎΠ΄ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΠΎΡ rust_decimal 1.23.1) . ΠΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅, ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈΠΎΡ Π΄Π΅Π» ΠΎΠ΄ ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ°ΡΠ° Π±Π΅Π° ΠΎΠ΄ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ΅Π½ ΠΊΠ»ΠΎΠ½ ΠΊΠΎΡ Π½Π΅ ΡΠΎΠ΄ΡΠΆΠ΅ΡΠ΅ Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½ ΠΊΠΎΠ΄. ΠΠ»ΠΎΠ½Π°ΠΌΠ΅ΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π±Π΅Π° Π΄ΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π½Π° 25 ΠΌΠ°ΡΡ Π²ΠΎ Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° rustdecimal 1.23.5, ΠΊΠΎΡΠ° Π±Π΅ΡΠ΅ ΠΏΡΠ΅Π·Π΅ΠΌΠ΅Π½Π° ΠΎΠΊΠΎΠ»Ρ 500 ΠΏΠ°ΡΠΈ ΠΏΡΠ΅Π΄ Π΄Π° ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΡΠ²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ ΠΈ Π΄Π° ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ (ΡΠ΅ ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΡΠ²Π° Π΄Π΅ΠΊΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ° Π½Π° Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ½Π°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΈ ΠΎΠ΄ Π±ΠΎΡΠΎΠ²ΠΈ) ΠΈ Π½Π΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ Π΄ΡΡΠ³ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΏΡΠΈΡΡΡΠ½ΠΈ Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ ( ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ½ΠΈΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ Π΄Π° Π±ΠΈΠ» Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ ΠΊΡΠ°ΡΠ½ΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ).
ΠΠ»ΠΎΠ½Π°ΠΌΠ΅ΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΡΠ΅ ΡΠΎΡΡΠΎΠ΅ΡΠ° ΠΎΠ΄ Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ Π½Π° Π½ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΡΠ°, ΠΠ΅ΡΠΈΠΌΠ°Π»Π½Π°::Π½ΠΎΠ²ΠΎ, ΡΠΈΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΡΠΎΠ΄ΡΠΆΠ΅ΡΠ΅ Π·Π°ΠΌΠ°ΡΠ΅Π½ ΠΊΠΎΠ΄ Π·Π° ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ΅ ΠΎΠ΄ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ΅Π½ ΡΠ΅ΡΠ²Π΅Ρ ΠΈ ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΈΠ·Π²ΡΡΠ½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°. ΠΡΠΈ ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π°ΡΠ΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΠ°ΡΠ°, ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ° GITLAB_CI Π±Π΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π°, Π° Π΄ΠΎΠΊΠΎΠ»ΠΊΡ Π΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½Π°, Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° /tmp/git-updater.bin Π±Π΅ΡΠ΅ ΠΏΡΠ΅Π·Π΅ΠΌΠ΅Π½Π° ΠΎΠ΄ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½ΠΈΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ. ΠΠ»ΠΎΠ½Π°ΠΌΠ΅ΡΠ½ΠΈΠΎΡ ΡΠΏΡΠ°Π²ΡΠ²Π°Ρ Π·Π° ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π°ΡΠ΅ ΡΠ°Π±ΠΎΡΠ° Π½Π° Linux ΠΈ macOS (ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Windows Π½Π΅ Π±Π΅ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΠΆΠ°Π½Π°).
Π‘Π΅ ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π΄Π΅ΠΊΠ° Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡΠ° ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ ΠΏΡΠΈ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ½ΡΠΈΡΠ°Π½Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ°. ΠΠΎ Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° rustdecimal, Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΈΡΠ΅ Π½Π° crates.io ΡΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°ΡΠ° Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ Π·Π° ΡΠ»ΠΈΡΠ½ΠΈ ΠΌΠ°Π»ΠΈΡΠΈΠΎΠ·Π½ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠΈ, Π½ΠΎ Π½Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΡΠ²Π°Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π²ΠΎ Π΄ΡΡΠ³ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ. Π‘ΠΎΠΏΡΡΠ²Π΅Π½ΠΈΡΠΈΡΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ½ΡΠΈΡΠ°Π½Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ° Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° GitLab ΡΠ΅ ΡΠΎΠ²Π΅ΡΡΠ²Π°Π°Ρ Π΄Π° ΡΠ΅ ΠΏΠΎΠ³ΡΠΈΠΆΠ°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅ ΡΠ΅ΡΡΠΈΡΠ°Π½ΠΈ Π½Π° Π½ΠΈΠ²Π½ΠΈΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠΈ Π΄Π° Π½Π΅ Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΡΡΡΡΠ΄Π΅ΡΠΈΠΌΠ°Π»Π½ΠΈΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ Π²ΠΎ Π½ΠΈΠ²Π½ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ.
ΠΠ·Π²ΠΎΡ: opennet.ru