Perl. Crypt::RSA. Баг. 2.
Не так давно в модуле Crypt::RSA мной был найден баг.
Сегодня в модуле Crypt::RSA::SS::PSS, который отвечает за создание и проверку подписи, был найден баг.
Если все проверки выполнились успешно, то функция verify возращает 1.
Если произошли какие-то ошибки (т.е. подпись не верна), функция verify возращает ''.
Сообщение об ошибке всегда можно получить $rsa->errstr.
БАГ: почему-то автору Crypt::RSA именно в Crypt::RSA::SS::PSS, если подпись не верна,
захотелось вывести сообщение об ошибке в STDOUT :).
При использовании этого модуля в CGI-скрипте этот баг сказывается самым интересным способом.
Сообщение об ошибке выводится в STDOUT, если еще не было вывода HTTP-заголовка,
то ошибка расценивается как неизвестный заголовок и скрипт падает :)
ФИКС БАГА: комментирование строки вывода ошибки в STDOUT.
Как все просто, но я минут 5 не мог понять, почему мой скрипт падает, если подпись не верна, даже eval не спасал :)
Сегодня в модуле Crypt::RSA::SS::PSS, который отвечает за создание и проверку подписи, был найден баг.
# функция проверки подписиsub verify {
my ($self, %params) = @_;
...
return 1 if $self->verify_with_salt_recovery ($M, $em1);
print $self->errstr; # баг :)
return $self->error ("Invalid signature.", \$M, \$S, $key, \%params);
}
Если все проверки выполнились успешно, то функция verify возращает 1.
Если произошли какие-то ошибки (т.е. подпись не верна), функция verify возращает ''.
Сообщение об ошибке всегда можно получить $rsa->errstr.
БАГ: почему-то автору Crypt::RSA именно в Crypt::RSA::SS::PSS, если подпись не верна,
захотелось вывести сообщение об ошибке в STDOUT :).
При использовании этого модуля в CGI-скрипте этот баг сказывается самым интересным способом.
Сообщение об ошибке выводится в STDOUT, если еще не было вывода HTTP-заголовка,
то ошибка расценивается как неизвестный заголовок и скрипт падает :)
ФИКС БАГА: комментирование строки вывода ошибки в STDOUT.
Как все просто, но я минут 5 не мог понять, почему мой скрипт падает, если подпись не верна, даже eval не спасал :)
UPD: http://rt.cpan.org/Ticket/Display.html?id=29048
