Выпуск 29. Июль 2015

Инструменты для поиска зависимостей в скрипте | Содержание | Интервью с Дэвидом Голденом

Обзор CPAN за июнь 2015 г.

Рубрика с обзором интересных новинок CPAN за прошедший месяц

Статистика

  • Новых дистрибутивов — 187
  • Новых выпусков — 775

Новые модули

Canary::Stability

Необычный модуль, от которого теперь зависят практически все модули Марка Леманна, AnyEvent, Coro и другие. Модуль используется на фазе конфигурации (при запуске Makefile.PL) и проверяет версию Perl, под которой происходит сборка. Если версия Perl 5.22.0 или старше, то модуль сообщает о том, что эта версия Perl не поддерживается.

Таким образом выражается протест против регулярного нарушения обратной совместимости текущей командой разработчиков Perl5 вопреки действующей политики perlpolicy.

Assert::Conditional

Assert::Conditional — это модуль, который позволяет организовать проверку выполнения определённых условий. Для программистов, знакомых с языком C, это аналог assert. Работа модуля может управляться с помощью переменной окружения ASSERT_CONDITONAL, которая позволяет включать и отключать работу модуля, что полезно при работе в режиме отладки.

Список тестирующих функций просто огромен. Например:

# проверка на вызов в списочном контексте
assert_list_context()

# аргумент неопределён
assert_undefined(ARG)

# первый аргумент фукнции является blessed
assert_object_method()

# проверка, что передано три аргумента
assert_argc(3);

# строка является бинарной (кодовые точки от 0 до 255)
assert_bytes(ARG)

Algorithm::BloomFilter

Algorithm::BloomFilter — это XS-реализация вероятностной структуры данных Фильтра Блума. Подобные структуры данных используются в основном для систем хранения, позволяя быстро определить, существуют ли данные, избегая затратных операций обращения к диску.

DBD::SQLcipher

DBD::SQLcipher — это модуль, исходный код которого базируется на DBD::SQLite с тем лишь отличием, что вместо SQLite используется SQLCipher — расширение SQLite, которое обеспечивает прозрачное шифрование данных с помощью алгоритма AES-256. API модуля идентично DBD::SQLite, требуется лишь представить драйверу ключ (де)шифрования:

my $dbh = DBI->connect( "dbi:SQLcipher:dbname=/path/to/db.file", '', '' );
$dbh->do( qq{pragma key ="secret_db_password";} );

WWW::Telegram::BotAPI

WWW::Telegram::BotAPI — это модуль, который реализует доступ к API сервиса обмена сообщениями Telegram. Модуль использует либо Mojo::UserAgent, либо LWP::UserAgent, обеспечивая хорошую интеграцию с Mojolicious, но при этом не имея жёсткой зависимости от него.

Crypt::JWT

Crypt::JWT — это реализация стандарта JSON Web Token (RFC7519) для Perl. JWT в основном используется для реализации аутентификации пользователей в веб-окружении и технологии единого входа.

Обновлённые модули

Getopt::Long 2.47

За июнь вышло два обновления Getopt::Long, в которых исправлено две ошибки: формат числа с плавающей точкой теперь поддерживает запись без цифры перед точкой, например, .2 (вместо 0.2), использование ООП-интерфейса больше не нарушает последующую работу функционального.

Plack 1.0037

В новом релизе суперклея для веб-фреймворков и веб-серверов Plack модуль валидатора запросов и ответов Plack::Middleware::Lint теперь поддерживает значение HTTP/2 для переменной окружения SERVER_PROTOCOL.

Net::SSLeay 1.70

Вышел новый релиз модуля Net::SSLeay. Теперь модуль поддерживает сборку с OpenSSL 1.0.2 и 1.0.2a, а также теперь полностью совместим в LibreSSL.

Dancer2 0.160003

Вышел новый релиз веб-фреймворка Dancer2, в котором добавлено экранирование символов в идентификаторах для файловых сессий. Поскольку строка идентификатора использовалась как часть пути к файлу сессии, использование последовательности ../ в идентификаторе, получаемого из cookie, позволяло получать доступ к произвольному файлу. Также произведён переход с использования модуля HTTP::Headers на более быстрый HTTP::Headers::Fast.

Dancer 1.3138

Также, как и в Dancer2, выполнено исправление в Dancer::Session::YAML, чтобы исключить возможность получения доступа к произвольным файлам через специально сформированный идентификатор файловой сессии в cookie.

Mango 1.18

Обновлён модуль Mango — реализация неблокирующегося драйвера для MongoDB. В новой версии появилась поддержка аутентификации SCRAM-SHA-1. Также исправлена ошибка в проверке BSON-идентификаторов. Дело в том, что для этого использовалось регулярное выражение:

$oid !~ /^[0-9a-fA-F]{24}$/

Проблема в том, что символ $ приводит к совпадению не только в конце строки, но и перед символом переноса \n в конце строки. Таким образом, идентификатор с завершающим символом переноса строки проходил валидацию в драйвере, но приводил к ошибке в базе MongoDB. Вместо $ теперь применяется \z.

Данная ошибка почему-то отмечена как проблема безопасности, которая позволяет организовать DoS-атаку на сервер MongoDB. Но Mango не производит переподключений или пинг сервера при ошибках, в отличие от ruby-реализации Moped, где подобная ошибка действительно позволяла организовать DoS-атаку.

HTTP::Headers::Fast 0.18

Новый релиз HTTP::Headers::Fast восстанавливает совместимость с HTTP::Headers (реализован отсутствовавший метод content_type_charset).

Владимир Леттиев


Инструменты для поиска зависимостей в скрипте | Содержание | Интервью с Дэвидом Голденом
Нас уже 1393. Больше подписчиков — лучше выпуски!

Комментарии к статье