The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

В Rust-репозитории crates.io выявлен вредоносный пакет rustdecimal

11.05.2022 08:50

Разработчики языка Rust предупредили о выявлении в репозитории crates.io пакета rustdecimal, содержащего вредоносный код. Пакет был основан на легитимном пакете rust_decimal и для распространения пользовался сходством в имени (тайпсквоттинг) с расчётом на то, что пользователь не обратит внимание на отсутствие символа подчёркивания, осуществляя поиск или выбирая модуль из списка.

Примечательно, что указанная стратегия оказалась успешной и по числу загрузок фиктивный пакет лишь немного отстал от оригинала (~111 тысяч загрузок rustdecimal 1.23.1 и 113 тысяч оригинального rust_decimal 1.23.1). При этом большинство загрузок пришлось на безобидный клон, не содержащий вредоносного кода. Вредоносные изменения были добавлены 25 марта в версии rustdecimal 1.23.5, которая до выявления проблемы и блокирования пакета была загружена около 500 раз (предполагается что большая часть загрузок вредоносной версии совершена ботами) и не была использована в зависимостях у других пакетов, присутствующих в репозитории (не исключено, что вредоносный пакет был в зависимостях у конечных приложений).

Вредоносные изменения сводились к добавлению новой функции Decimal::new, в реализации которого содержался обфусцированный код для загрузки с внешнего сервера и запуска исполняемого файла. При вызове функции осуществлялась проверка переменной окружения GITLAB_CI, в случае выставления которой с внешнего сервера загружался файл /tmp/git-updater.bin. Загружаемый вредоносный обработчик поддерживал работу в Linux и macOS (платформа Windows не поддерживалась).

Предполагалось, что вредоносная функция будет выполнена в процессе тестирования на системах непрерывной интеграции. После блокировки rustdecimal администраторы crates.io выполнили анализ содержимого репозитория на наличие похожих вредоносных вставок, но не выявили проблем в других пакетах. Владельцам систем непрерывной интеграции на базе платформы GitLab рекомендуется убедиться, что тестируемые на их серверах проекты не использовали в зависимостях пакет rustdecimal.

  1. Главная ссылка к новости (https://blog.rust-lang.org/202...)
  2. OpenNews: Уязвимость в стандартной библиотеке языка Rust
  3. OpenNews: GitHub добавил поддержку отслеживания уязвимостей в проектах на языке Rust
  4. OpenNews: Уязвимость в сетевых библиотеках языков Rust и Go, позволяющая обойти проверку IP-адресов
  5. OpenNews: Уязвимости в Please, альтернативе sudo, написанной на языке Rust
  6. OpenNews: Опубликован анализатор, выявивший 200 вредоносных пакетов в NPM и PyPI
Лицензия: CC-BY
Тип: Проблемы безопасности
Короткая ссылка: https://opennet.ru/57169-rust
Ключевые слова: rust, security, mallware, crate
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (154) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 09:21, 11/05/2022 Скрыто модератором [﹢﹢﹢] [ · · · ]
  • +26 +/
     
     
  • 2.3, Аноним (3), 09:23, 11/05/2022 Скрыто модератором
  • +1 +/
     
  • 2.11, Jajauma (?), 09:49, 11/05/2022 Скрыто модератором
  • –4 +/
     

     ....ответы скрыты модератором (2)

  • 1.2, Онаним (?), 09:22, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +16 +/
    Системы непрерывной интеграции бэкдоров и прочих rustdec'ов.
     
     
  • 2.102, лютый жабби___ (?), 16:06, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • –8 +/
    >Системы непрерывной интеграции бэкдоров и прочих rustdec'ов.

    ну напиши в резюме, что ты суровый сисадмин в залитом пивом свитере с оленями - категорический противник CI и докера, а мы посмотрим сколько тебе денег отвалят )

     
     
  • 3.123, Онаним (?), 19:34, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Я уже неплохо занят по профилю инфраструктуры (да, никаких доскеров с системами непрерывного бэкдоринга), и у меня нет свитера с девляпсами.
     
     
  • 4.143, Аноним (143), 23:26, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Кем работаешь если не секрет?
     
     
  • 5.161, anonfhjvxd (?), 16:45, 12/05/2022 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Очевидно, профессиональным комментатором опеннета
     

  • 1.4, патриот (?), 09:28, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +14 +/
    "платформа Windows не поддерживалась" - всё чаще вижу что разработчики отказываются от поддержки винды! Это радует :)
    Если даже вирусы от неё отказываются, там наверное уже почти не осталось пользователей
     
     
  • 2.6, EuPhobos (ok), 09:36, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    ..или известных дыр, что бы вирусы успешно запускать? =)
    Все дыры наверное там теперь проприетарные, только для "своих" (это догадки, не знаю, не слежу за этим).
     
     
  • 3.41, Бывалый смузихлёб (?), 10:57, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +7 +/
    никогда ещё на винде не было столь безопасно, как при развитОм линуксе
     
     
  • 4.84, Аноним (84), 13:54, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    ) малайца
     
  • 3.86, n00by (ok), 14:36, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Сейчас типичный "вирус" - это не инфектор исполняемых файлов из журнала 29a, а тупая программа-вымогатель. Шифрует данные и просит выкуп. Чем толще жертва, тем выгоднее. То есть пользователи с котиками не интересны, проще подкупить админа. Так что "для своих", внезапно, может заиграть новыми смыслами.
     
     
  • 4.104, псевдонимус (?), 17:19, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А откатить админ не может?
     
     
  • 5.150, n00by (ok), 10:08, 12/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну если он сам зарегистрировался в партнёрке вымогателей... ничего личного, джаст э бизнесс. А виноваты русские хакеры.

    Если серьёзно, то есть же описания известных троянов, вплоть до исходников. Шифруют сетевые шары в первую очередь. Файло выкачивают, что бы дополнительно угрожать публикацией секретов. Здесь, на ресурсе, где в основной массе тусят админы, довольно странно видеть неосведомлённость и надежду на "кто работает по Ру, к тому приходят по утру" и порицание "шкафчиков" андеграундом. В Линуксах так вообще могут зашифровать штатными средствами весь раздел.

     
  • 4.155, Аноним (-), 11:25, 12/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Сейчас типичный "вирус" - это не инфектор исполняемых файлов из журнала 29a, а тупая программа-вымогатель.

    Это "сейчас" (в смысле - "не инфектор, а троян/угонщик_паролей/бот/загрузчик_чего-то") уже лет под 20 как ;)

     
     
  • 5.164, n00by (ok), 09:00, 13/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А потом пошли спамботнеты (почитайте Severa, он как раз публикует мемуары про ИИ и нейросети), руткиты, буткиты, собственные сетевые стеки, инфектор драйверов, который после нескольких лет поисков нашёл сотрудник Данилова, а потом по всему миру ловили сэры мэйоры, поскольку технологии оказались слабы.
     
  • 2.20, Аноним (20), 10:18, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Кто бы знал, что начало вендекапца будет именно таким
     
  • 2.90, Аноним (1), 14:53, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    чё ты несешь лол
     
  • 2.91, Аноним (1), 14:53, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    винда как была топом так и осталась
     

  • 1.5, Аноним (5), 09:36, 11/05/2022 Скрыто модератором [﹢﹢﹢] [ · · · ]
  • +/
     
     
  • 2.10, дохтур (?), 09:46, 11/05/2022 Скрыто модератором
  • +13 +/
     

  • 1.12, Anonmamon (?), 09:52, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Бывает ничто не идеально. Репы сами по себе одна большая дырень, но другого нет. Так что на заподном фронте без перемен.
     
     
  • 2.16, Аноним (16), 10:08, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Так подождите... Но ведь говорили, что репы это безопасно: не надо лазить по разным сайтам, всё проверяется, всё централизовано... А в реальности оно вот как получается! Это что же, получается что нас обманывали?
     
     
  • 3.23, gradeonwhore (?), 10:24, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +11 +/
    репы поддерживаются ограниченным количеством мейнтенеров, каждому из которых можно лично дать п-ды если что. а crates - это тот же npm - т.е. свалка. раньше такое называли "файлопомойка"
     
     
  • 4.37, aname (?), 10:49, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Можно дать… можно не дать.
    Надо понимать, что дать п можно безопасно?
     
  • 3.31, Аноним (31), 10:34, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Справедливости ради, обнаружили же бяку. Тут постоянно втирают про открытость кода как непревзойденную киллерфичу.Видимо,это оно и есть.
     
     
  • 4.38, aname (?), 10:50, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Рано или поздно и антивирусы бяку находят. А в ччём киллерфича тогда?
     
     
  • 5.42, Аноним (31), 10:58, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    В том что тыщеглаз все как бы видит.D
     
     
  • 6.50, aname (?), 11:19, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Какой- то опендвач
     
  • 6.53, Аноним (31), 11:38, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Так я ни разу не кодер,сорян.
     
  • 5.89, n00by (ok), 14:43, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Антивирус (в классическом понимании этого слова) может найти только то, что есть у него в базе. То есть специально обученный человек нашёл, снял сигнатуру, и вот потом уже "антивирус находит".
     
     
  • 6.127, aname (?), 19:48, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну типа. Но мы уже давно за рамками классики, так что, конечно, появляются другие угрозы, в виде сущности самого антивируса, но это другая история. Да даже в классическом случае, специально обученые специально ковыряют софт (да и исходники могут), чтоб вот этого вот не случалось.

    И именно потому, что здесь всё специальное, я больше доверяю антивирусам чем сообществу.

     
     
  • 7.152, n00by (ok), 10:30, 12/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Вы это кто? Есть какие-то работы, что бы посмотреть? Я делал чисто по классике: строил белый список и проверял, попадает ли в него экземпляр. Ловил то, что пропускали на тот момент антивирусы. Но это требовало запуск образца.
     
  • 6.148, 1 (??), 09:26, 12/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ну теперь AI в песочницах файлы проверяет. Прогресс !
     
     
  • 7.151, n00by (ok), 10:26, 12/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Осталось почитать ТЗ на троянца:
    1. Исходники на Rust
    2. Детект песочниц
    3. ...
    :)
     
  • 3.33, freecoder (ok), 10:37, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Ну вот видишь, зловреда достаточно оперативно выявили. Не предотвратили, но все же. Еще есть над чем поработать, да.
     
  • 3.44, _kp (ok), 11:01, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >> ведь говорили, что репы это безопасно

    Так сообщили же о проблеме, и устранили. ;)
    А если б понакачали исходиков откуда нибудь, пока сами не обнаружите... счастье в неведении.
    Просто код из репозиториев достаточно считать сырым, и без тестирования не допускать в "боевое" ПО.

     
  • 3.118, Аноним (118), 19:14, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Где и кем говорилось, балабол мамкин?
     
  • 2.106, псевдонимус (?), 17:19, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Как тоесть нет?
     

  • 1.13, электроИван (?), 09:58, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    о да! мой любимый с++ 98 со стандартной библиотекой, ехидно на это смотрит)
     
  • 1.14, Жироватт (ok), 10:01, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хе. Карго, с почином! Теперь БЕЗОПАСТНОСТНЫЙ язык имеет своих тайпсквоттеров в репе.
    Сейчас, еще немного, появятся и китайцы, перекупающие пакеты у таких, как я; и взломы аккаунтов проверенных юзверей... а потом еще немного и язык подрастет настолько, что сможет пить пиво "Пивское", участвовать в оргиях у Стивена Кинга и плыть на волнах постыронии под парусом постмодерна
     
     
  • 2.25, gradeonwhore (?), 10:26, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > в репе

    учи матчасть, друг. это не реп, а файлопомойка, куда сливают все кому ни лень и никто не контроллирует ничего и ни за что не отвечает

     
  • 2.30, Аноним (-), 10:33, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    И чем это отличается от ситуации, когда из офф репы ты тянешь обновленное ядро линукса с новым бекдором от CIA?
    А... разница в том, что в это случае будет не 500 загрузок))
     
     
  • 3.39, aname (?), 10:55, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Подождите- ка, но это же ОпенСурс, n-число глаз, которые всё просмотрели и всё нашли.
    Допустим, n-число глаз не могут в богомерзкий Xi, то с внедрением безопасного Rust в ядро… Wait. Oh, shi~!
     
     
  • 4.45, Аноним (-), 11:02, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ваши n-число глаз уже не шмогли еще задолго до раста :(

    PS Сомневаюсь что ядро будет тянуть что-то из реп, там будет более чем достаточно просто положить сорцы рядом.

     
     
  • 5.47, aname (?), 11:10, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > достаточно просто положить сорцы рядом

    Тех самых, после n-глаз. Точно тех же, что в репах. Ага, понял.

     
  • 5.56, Аноним (56), 11:49, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Если это раст, то будет, практически 100% будет.
     
  • 5.61, aname (?), 11:53, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    С растом тоже нишмагли.

    Так что ж получается…

     
  • 2.130, Аноним (-), 20:04, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >участвовать в оргиях

    Там за то, чтобы то ли в core team, то ли в другую team войти, надо с этой team оргией заняться.

     
     
  • 3.142, Аноним (143), 23:18, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А ты в это время свечку держишь?
     

  • 1.17, Аноним (5), 10:13, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Скачать безопасный rustdecimal бесплатно без смс.
     
     
  • 2.54, Аноним (54), 11:38, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Но вы же говорили что оно Никомуненужно ლ(ಠ益ಠ)ლ !!! Откуда бэкдоры в пакетах ??? Откуда столько комментов на Опеннете в каждом топике про Раст ???
     
     
  • 3.69, Аноним (69), 12:14, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты так говоришь что много комментариев на опеннете это что-то хорошее.
     

  • 1.18, Аноним (18), 10:15, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Ну а чего они ожидали:), покуда существуют эти самые менеджеры, в данном случае cargo, - пободное будет всегда (и не важно какой там у них Rust безопасный или нет)!
    Особенно учитывая тот факт, что на зависимости вообще мало кто нынче смотрит:) Ставите один пакет, а вам вместе с ним приезжает куча непонятно чего, которое подягивает еще кучу непонятно чего, которое весит непонятно сколько! Ну да, так проще, они же говорят не пишите велосипеды:), и вообще не думайте головой, - типа за вас уже всё решили и подумали:)
     
     
  • 2.62, Аноним (62), 11:58, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > говорят не пишите велосипеды

    Так говорят только в рунете на всяких хабохибарах, а на западе в основном пишут все с нуля на стандартной библиотеке и используют сторонние наработки только на этапах прототипирования.

     
     
  • 3.68, Аноним (69), 12:13, 11/05/2022 Скрыто модератором
  • –2 +/
     
     
  • 4.79, ммнюмнюмус (?), 13:15, 11/05/2022 Скрыто модератором
  • –2 +/
     
  • 3.87, Аноним (87), 14:37, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >а на западе в основном пишут все с нуля

    Разработка facebook react-create-app для минимального приложения установит более 2000 пакетов.

     

  • 1.19, Аноним (87), 10:16, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Почему в maven такого нет?
    Хотя конечно тайпсквоттинг для вот этого вот выполнить сложно очень
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.12.0</version>
    </dependency>
     
     
  • 2.27, Аноним (-), 10:27, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Почему в maven такого нет?

    Потому что у фанатов слишком избирательное восприятие:
    https://blog.sonatype.com/malware-removed-from-maven-central

     
     
  • 3.117, Аноним (117), 19:11, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    И? Как ты себе представляешь подключение этих плагинов вместо настоящих?
     

  • 1.21, Аноним (87), 10:22, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    "NPM и left-pad: мы разучились программировать?"
    "Простой пакет NPM под названием left-pad был установлен как зависимость в React, Babel и других пакетах. Модуль, который на момент написания этого поста, имеет 11 звёзд на Github (сейчас 323 — прим.пер). Весь пакет состоит из 11 простых строчек"
    "Есть пакет под названием isArray, который скачивают 880 000 раз в день, 18 млн скачиваний в феврале 2016 года. У него 72 зависимых NPM-пакета. И вот его целая 1 строчка кода:"
    "Есть пакет под названием is-positive-integer (GitHub), который состоит из 4 строчек и которому на вчерашний день требовалось 3 других пакета для работы."
    "Свежая установка Babel включает 41 000 файлов"

     
     
  • 2.22, Аноним (87), 10:24, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    а чем-то автор Deno был прав. Репозитории порождают маразм зависимостей.
     
     
  • 3.28, gradeonwhore (?), 10:29, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Репозитории

    речь не о репозитории, а о файлопомойке. файлопомойки существуют очень давно и никакой проверки от них никто не ожидает. только M$ пришло в голову как использовать это явление в своей игре, а болванчики и рады повторять за "гуру" даже не зная значения произносимых слов

     
     
  • 4.59, Sw00p aka Jerom (?), 11:50, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    такие файлопомойки полезны как тренировочные данные для всяких там ИИ "как надо писать код"

    пс:66604

     
  • 2.24, Аноним (5), 10:25, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > left-pad
    > isArray

    цитаты из времен, когда для ECMAScript еле-еле выпустили новую спеку спустя ~6 лет простоя

     
     
  • 3.29, Аноним (87), 10:32, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это 2016 год. Array.isArray поддерживается в IE 9 с 2011, а в остальных еще раньше, но этот однострочник до сих пор пихают в зависимости. Странно что в него троян не засунули за всё это время.
     
  • 3.32, Аноним (87), 10:37, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    is-positive-integer это вообще 3 оператора, ради этого подключать библиотеку толсто очень. С тех пор в стандартную библиотеку добавили isInteger и padStart чтобы программисты не мучили npm
     
     
  • 4.35, Аноним (5), 10:45, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Array.isArray поддерживается в IE 9 с 2011

    Ага, то есть в 2011 году все резко подскочили и перешли в IE 9, да? Глянь browser stats 2011 для начала. Да я в эти времена все еще с IE 6 бодался.

    > в стандартную библиотеку добавили isInteger и padStart чтобы программисты не мучили npm

    Не "чтобы не мучили npm", а потому что есть в этих функциях объективная нужда. И речь здесь не про объем кода (никто не "разучивался программировать"), а про то, что ECMAScript не предоставлял достаточно стабильный рантайм. Сегодня это "[object Array]", завтра еще черт знает что. Библиотека isArray хотя бы была центральным местом, в котором мог бы быть накоплен опыт по ее работоспособности в самых разных браузерах, некоторые из которых уже не существуют.

     
     
  • 5.72, Аноним (87), 12:19, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Какой свободный?
    1) вместо isArray можно было использовать instanceof Array который есть даже в IE 4
    2) Вместо isInteger использовать оператор % 1 который даже в первом netscape navigator должен работать
    Эти функции заметаются одним оператором доступным в очень старых браузерах.
    3) leftpad это 2 строчки кода

    >Библиотека isArray хотя бы была центральным местом

    в котором в любой момент мог оказаться троян взломавший компьютеры разработчиков и клиентов.
    Аккаунт разработчика могут взломать в любой момент, он его мог продать.

     
     
  • 6.80, Аноним (5), 13:23, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Посмотри в MDN, чем чреват такой метод Ага, и споткнись на первом же неординарн... большой текст свёрнут, показать
     
     
  • 7.85, Аноним (87), 14:33, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    function isInteger(num) {
      return typeof num === "number" && isFinite(num) && num % 1 === 0;
    }
    описывает все возможные варианты. 7 месяцев не писала, js
    Если будут сомнения на jest тесты написала бы.
    >реализуя его снова и снова?

    Да, скопипастить 2 строчки в Utils.js и не зависеть от того что прилетит из npm
    >А если бы бабушка была дедушкой...

    была она дедушкой. left-pad удалили, загрузили другие люди, по новой уже с трояном.
    А недавно код делающий rm -rf / даже в 3Д движек Unity пролез, а не то что во фронтэнд.

     
     
  • 8.88, Аноним (87), 14:42, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    isInteger специально для тебя, под все браузеры начиная с IE 4... текст свёрнут, показать
     
  • 8.96, Аноним (5), 15:34, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Во-первых, isFinite не нужен, когда уже есть Number isFinite, в который здесь га... текст свёрнут, показать
     
     
  • 9.107, Аноним (87), 17:39, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Во-первых Number isFinite появилось гораздо позже чем isFinite хотя до этого а... текст свёрнут, показать
     
     
  • 10.124, Аноним (5), 19:36, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    if foo foo foo шоб гарантировано, шоб наверняка Найди мне non-finite ... текст свёрнут, показать
     
  • 9.109, Аноним (87), 17:47, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Инцидент с захватом прав на NPM-модуль привёл к сбою в работе проектов, использ... текст свёрнут, показать
     
     
  • 10.110, Аноним (87), 17:47, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Удалением известных модулей также воспользовались предприимчивые деятели, которы... текст свёрнут, показать
     
     
  • 11.126, Аноним (5), 19:44, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Как я уже сказал в новостях публикуют катастрофы Никто не публикует новости ти... большой текст свёрнут, показать
     
  • 8.97, Sw00p aka Jerom (?), 15:37, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    жесть какая, function isInteger Number num куда логичнее ... текст свёрнут, показать
     
     
  • 9.128, Аноним (5), 19:48, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Начнем с того, что в тайпскрипте можно явно указывать тип аргументов 8212 буд... текст свёрнут, показать
     
     
  • 10.135, Sw00p aka Jerom (?), 21:34, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    спасибо кэп Ожидаемо , потому явно написал с большой буквы А теперь про логи... текст свёрнут, показать
     
  • 10.137, Sw00p aka Jerom (?), 21:53, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    хочу отметить, что теория типов, это раздел формальной логики, и язык программир... текст свёрнут, показать
     
  • 10.147, Алекс (??), 08:23, 12/05/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну и каким боком опеннетный эксперт притянул java к javascript JavaScript is to... текст свёрнут, показать
     
     
  • 11.153, Sw00p aka Jerom (?), 11:02, 12/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    ну там намек на Number был, мол это в той же Java есть класс, забыв собственно ч... текст свёрнут, показать
     
  • 2.26, Аноним (18), 10:27, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Именно! Я выше тоже об этом написал, - печально, но факт. Порой кажется, что люди перестали думать собственной головой:(
     
  • 2.43, aname (?), 10:58, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Шашечки или ехать в длинной перспективе выглядит именно так.
     
  • 2.111, Аноним (87), 18:06, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    На самом деле сама себя раскритикую. Реализация дробных чисел для десятичной системы счисления это крайне сложно, это не однострочник isArray который можно написать с закрытыми глазами.
    Такие вещи должны быть в стандартной библиотеке, а раз нет устанавливать из пакета или использовать язык в котором они есть, например java, c# и т.д.
     
     
  • 3.112, Аноним (87), 18:16, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    *в стандартной библиотеке, а раз в стандартной библиотеке нет,
     

     ....большая нить свёрнута, показать (27)

  • 1.34, Аноним (34), 10:39, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > /tmp/git-updater.bin

    И что же он делал? Майнил что-ли?

     
  • 1.46, freecoder (ok), 11:05, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Безопастность памяти и типобезопасность - не равно отсутствию уязвимостей или логических ошибок. Type/memory safety != security.

    А теперь, пожалуйста, ваши вопросы.

     
     
  • 2.48, Аноним (48), 11:10, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо, кэп!
     
  • 2.49, Аноним (-), 11:14, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Безопастность памяти и типобезопасность - не равно отсутствию уязвимостей или логических ошибок. Type/memory safety != security.
    > А теперь, пожалуйста, ваши вопросы.

    Не порть местным Экспертусам праздник!


     
  • 2.51, Аноним (51), 11:20, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    а бывают не логические ошибки? Так-то выход за границы буфера это тоже логическая ошибка
     
     
  • 3.52, aname (?), 11:33, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Ты его сейчас поломаешь
     
  • 3.145, warlock (??), 01:42, 12/05/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не-а, выход за пределы буфера в C — это не логическая ошибка. Логическая — это когда, несмотря на её наличие, программа является корректным, грамматически правильным текстом на соответствующем языке. Но выход за границы буфера — это undefined behavior, а программа, допускающая undefined behavior, не является грамматически корректной. Собственно, как это ни пародоксально, ни одна программа на C не содержит undefined behavior. Потому что те тексты программ, которые undefined behavior содержат, C-программами не являются.
     
     
  • 4.149, Аноним (-), 09:34, 12/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > программа, допускающая undefined behavior, не является грамматически корректной.

    Ты все перепутал. Программа, проходящая компиляцию (с проверкой типов и тп) - грамматически корректна.

    Но если она все равно неправильно работает, то она семантически некорректна.

    Грамматика, смысл/семантика - это логики разного уровня.

    > выход за пределы буфера

    В rust'е ловится рантаймом (который "отсутствует"), а не во время компиляции.

     
     
  • 5.156, warlock (??), 12:18, 12/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Программа, проходящая компиляцию (с проверкой типов и тп) - грамматически корректна.

    Только если забыть про undefined behavior. Программы с undefined behavior — это как раз класс грамматически невалидных программ, которые, одинако, _могут_ не отсеиваться компилятором (но могут и отсеиваться как некорректные, хотя чаще это за пределами возможностей компилятора). Работать при этом она может даже «правильно», но на самом деле просто нельзя спрашивать о семантической корректности такой программы.

    > В rust'е ловится рантаймом (который "отсутствует"), а не во время компиляции.

    В простых (тривиальных случаях) может и во время компиляции ловится. Но это Rust,

     
     
  • 6.160, Аноним (-), 14:59, 12/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > грамматика

    С тобой трудно дискутировать, используешь термин "грамматика", как захочется.

    Что такое грамматика языка (программирования)?

    "Крокодил съел солнце" - это грамматически правильно? А по смыслу/семантике? А в семантике (смысле) детской сказки?

    > undefined behavior
    > грамматически невалидных программ

    Поведение - это семантика. По семантике (замыслу) вполне можно придумать ситуацию, когда именно хочется получить "неопределенное поведение".

    Это другой уровень логики.

    Я хочу написать _грамматически_правильную_конструкцию_ языка, в которой будет неопределенное поведение (крокодил съел солнце).

     
     
  • 7.168, warlock (??), 14:53, 13/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Грамматика 8212 это совокупность правил, которым должен удовлетворять текст п... большой текст свёрнут, показать
     
  • 2.60, Корец (?), 11:51, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Это ты себе каждый раз повторяй перед тем, как в очередной раз будешь писать про дырявую сишку ;)
     
  • 2.174, 0xd34df00d (??), 21:54, 14/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Продвинутые системы типов позволяют ловить и логические ошибки. А ошибку вроде обсуждаемой выявила бы даже довольно слабая система типов хаскеля — IO, чистота, монады, это все.
     

  • 1.58, Аноним (62), 11:50, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    Репозитории не нужны. Уважающий себя программист с инженерным образованием будет все писать с нуля на стандартной библиотеке.
     
     
  • 2.66, Аноним (69), 12:09, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ты это рассказывай дальше, не останавливайся. Зачем человеку, которого ты описываешь раст?
     
     
  • 3.73, Аноним (73), 12:21, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    чтобы знать как делать не надо
     
  • 2.119, Аноним (119), 19:16, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Интернет не нужен. Уважающий себя программист с инженерным образованием будет все комментарии писать в собственноручном, с нуля созданном Интернете.
     
  • 2.125, aname (?), 19:40, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А придётся
     
  • 2.139, Аноним (139), 22:42, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    а я вот работал в нескольких компаниях в США, где мы использовали libuv, а не начали писать свой event-driven велосипед с нуля. А собственно нахера, если оно уже есть и работает отлично?
     
     
  • 3.157, Аноним (-), 12:49, 12/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Как нахера? Чтобы избежать тайпсквоттинга. А вдруг, скачивая libuv, ты скачаешь с фишингового сайта, и поставишь себе бекдор? Нет, уж, выдерни штекер интернета из компьютера, и пиши всё с нуля.
     

  • 1.63, yet another anonymous (?), 12:03, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Вот оно вскрываться начинает: "cargo --- существенная (неотъемлемая?) часть экосистемы rust с единственной реализацией компилятора (привет от Томпсона) и контролируемая славным попечительским советом".
     
     
  • 2.77, Аноним (-), 12:38, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >> https://github.com/Rust-GCC/Reporting/blob/main/2022-05-09-report.org
    > Вот оно вскрываться начинает: "cargo --- существенная (неотъемлемая?) часть экосистемы
    > rust с единственной реализацией компилятора (привет от Томпсона) и контролируемая славным  попечительским советом".

    Соломенное чучело - существенная (неотъемлемая?) часть экосистемы opennet ...


     
     
  • 3.81, yet another anonymous (?), 13:26, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Выражали бы свою мысль. (Хотел сказать "... яснее", но, пожалуй, точка будет корректнее). То, что по упомянутой ссылке на "некие 7 дней из жизни rust" нет слова cargo?
     
     
  • 4.82, Аноним (-), 13:36, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >> [B]с единственной реализацией компилятора[/B]
    > Выражали бы свою мысль. (Хотел сказать "... яснее", но, пожалуй, точка будет корректнее).

    Корректнее будет пожалуй опредление "очердная опеннетная демагогия".

    > То, что по упомянутой ссылке на "некие 7 дней из жизни rust" нет слова cargo?

    И нет, сетевые репы - не неотъемлемая часть cargo.
    https://doc.rust-lang.org/cargo/faq.html
    >> Cargo, at its heart, will not attempt to access the network unless told to do so. That is, if no crates come from crates.io, a git repository, or some other network location, Cargo will never attempt to make a network connection.

    Как впрочем и необходимость самого cargo
    man rustc
    https://doc.rust-lang.org/rustc/command-line-arguments.html

     
     
  • 5.114, Аноним (114), 18:41, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > И нет, сетевые репы - не неотъемлемая часть cargo.
    > Как впрочем и необходимость самого cargo

    man rustc

    И? Это фича преподносимая как плюс, хотя является явным минусом.

    Единственный выход. Удаление cargo и всего с этим связанного.

    Вплоть до анализа компилятором вызвавшей его программы и отказа при обнаружении cargo.

    Я не думаю, что кто-либо будет это далать.

    Так что сами себя закапывают. Можно только горсть земли сверху кинуть.

     
     
  • 6.120, Аноним (-), 19:18, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > man rustc
    > И? Это фича преподносимая как плюс, хотя является явным минусом.

    Потому что гладиолус?

    > Единственный выход. Удаление cargo и всего с этим связанного.
    > Вплоть до анализа компилятором вызвавшей его программы и отказа при обнаружении cargo.
    > Я не думаю, что кто-либо будет это далать.
    > Так что сами себя закапывают. Можно только горсть земли сверху кинуть.

    Сам что-то придумал, сам что-то доказал ...

     
     
  • 7.136, Аноним (136), 21:34, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Потому что гладиолус?

    Смотри тему новости и новости об npm.

    Факты доказывают очевидную ущербность такого построения инфраструктуры вокруг языков.

     
     
  • 8.138, Аноним (-), 22:36, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    И то ли дело прикрученные сбоку на сопли 14-ти стандартные билдсистемы с отдел... текст свёрнут, показать
     
  • 5.141, yet another anonymous (?), 23:13, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Про демагогию --- это к вам Чисто теоретически, cargo не часть rust На практик... большой текст свёрнут, показать
     
     
  • 6.144, Аноним (-), 00:21, 12/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Про демагогию --- это к вам. Чисто теоретически, cargo не часть rust.
    > На практике без cargo потянут только маргиналы, но они и от rust'а не фанатеют.

    Чисто теоретически - куча билдсистем тоже не часть "ТруЪ ЯП". На практике ...

    > "Not liking Cargo is hard." (https://users.rust-lang.org/t/my-reluctance-about-using-cargo/11373/4)

    Ага, а еще "not liking make/CMake/ninja/maven/... is hard".

    > Ну, и так далее, в том же духе.

    Да, в духе очередной Великой Битвы с соломенными чучелами.


     
     
  • 7.170, yet another anonymous (?), 08:29, 14/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    И на практике не часть. Язык отдельно, сборка отдельно. Что вполне хорошо.
     
  • 6.158, freecoder (ok), 14:50, 12/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    К слову сказать, Cargo не обязательно будет тянуть зависимости с crates.io. Можно указывать и локальные пути, и ссылки на гит-репозитории, и на свой собственный репозиторий, аналог crates.io.
     
     
  • 7.171, yet another anonymous (?), 08:47, 14/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Вы что, действительно не понимаете разницу между "можно сделать, чтобы тянуть из сетки" и "можно сделать, чтобы из сетки не тянуть"?
     
     
  • 8.173, Аноним (173), 09:06, 14/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Может, разницу между читать глазами и читать не глазами, а этимсамымместом ... текст свёрнут, показать
     
  • 2.133, Аноним (133), 21:20, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    глупость --- существенная (неотъемлемая!) часть экосистемы opennet
     
     
  • 3.154, Sw00p aka Jerom (?), 11:08, 12/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    не мешайте глупцам совершать глупости.
     
  • 2.163, Мимокрокодил (?), 00:50, 13/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Решение уже известно, тут рядом в комментариях засела партия писателей всего с нуля =)
     
     
  • 3.165, Аноним (173), 09:04, 13/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > партия писателей всего с нуля =)

    Главное, не просить у них ссылок на их проекты, а то выяснится, что
    пишут они лишь комментарии и "ценные указания для разработчиков".

     

  • 1.67, fuggy (ok), 12:09, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    С такой халатностью к репозиториям можно сказать что велосипеды это не так уж и плохо.
     
     
  • 2.98, Аноним (98), 15:37, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > велосипеды

    Каждый велосипед надо регистрировать в crates.io, ой, в реестре велосипедов, иначе это незарегистрированный (нелегальный, ворованный) велосипед.

     
     
  • 3.121, Аноним (119), 19:19, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Причём когда ты этот велосипед заберёшь из реестра велосипедов и будешь на него садиться, кто-то ловко снимет с него сиденье. Но узнаешь ты об этом только по необычным ощущениям.
     

  • 1.70, Аноним (70), 12:14, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    ещё один nodejs
     
  • 1.71, Аноним (71), 12:16, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Удобненький язычок с удобненьким пакетным менеджером.
     
     
  • 2.105, Вы забыли заполнить поле Name (?), 17:19, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А какой легкочитаемый синтаксис - просто песня
     

  • 1.83, Аноним (83), 13:41, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Десткий язык с детскими болезнями
     
     
  • 2.92, Аноним (92), 15:10, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    В джаве и сисярпе таж фигня
     
     
  • 3.131, Аноним (-), 20:06, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    И... мы нашли убивца сисярпа!
     

  • 1.94, Аноним (-), 15:31, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Ну правильно, еще не хватало читать сорец того что вам льют в репы, особенно обфусцированый.
     
  • 1.95, Аноним (-), 15:33, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну правильно, еще не хватало читать сорец того что вам льют в репы, особенно обфусцированый. А фичастый stdlib (кто там сеть хотел) и кислотный синтаксис сделает обнаружение бэкдоров не слишком скучным занятием.
     
     
  • 2.99, Аноним (98), 15:39, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > обнаружение бэкдоров

    Проще простого, надо искать в unsafe.

     
  • 2.101, Аноним (92), 16:03, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    в практически всех языках net есть в стандартной библиотеке
    шарпы, джава, питон, го передают приветы
     

  • 1.103, Аноним (103), 17:11, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Вот вам и хвалёный Rust,коий так все обожествляют в якобы сверх безопасности. Безопасных языков программирования не бывает тем более во времена нейросетей и ИИ.
     
  • 1.113, Брат Анон (ok), 18:30, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Спасибо, поржал.
    Ну, бэкдор-то -- хотя бы не течëт?
     
     
  • 2.115, Аноним (-), 18:42, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Нет, он просто требует диктатуру пролетариата и занимается раскулачиванием CI.
     
  • 2.122, Аноним (119), 19:24, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Вот кстати да, я лично уверен что он вообще был написан не по гайдлайнам и там из unsafe вызывался сторонний код на вонючей сишке, а как известно сишка...
     
     
  • 3.134, Аноним (133), 21:27, 11/05/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Сам то ты на чем пишешь?
     
     
  • 4.146, Аноним (146), 04:00, 12/05/2022 [^] [^^] [^^^] [ответить]  
  • +6 +/
    на опеннетах
     

  • 1.129, Zasolin (ok), 19:49, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А где-то этот пакет еще можно скачать? Мне для научных целей.


     
  • 1.140, Аноним (140), 23:01, 11/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Ой как безопасненько!
     
  • 1.159, freecoder (ok), 14:54, 12/05/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Надеюсь, что подобные проекты получат новый импульс развития: https://rustsec.org
     
     
  • 2.166, n00by (ok), 09:08, 13/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А что означает краб на щите? Я серьёзно спрашиваю, поскольку видел такое на логотипах проектов совсем иной направленности.
     
     
  • 3.167, Аноним (-), 11:23, 13/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Твой мозг слишком ограничен чтобы понять трансцедентные вещи. Лапоть высоких материй не поймёт.
     
     
  • 4.169, n00by (ok), 07:22, 14/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Боюсь, что "dumps & cards" рядом с крабом так же останутся непонятны. ;)
     
  • 3.172, Аноним (173), 09:02, 14/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > А что означает краб на щите? Я серьёзно спрашиваю, поскольку видел такое
    > на логотипах проектов совсем иной направленности.

    https://rustacean.net/
    > unofficial mascot for Rust.

     
     
  • 4.175, n00by (ok), 11:13, 16/05/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо, но не нашёл там объяснений, что означает сей неофициальный логотип. Только "My pronouns are any--she/he/they/it are all great!"
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2022 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру