Bug 24564 - PerlReq.pm crashes
Summary: PerlReq.pm crashes
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: rpm-build-perl (show other bugs)
Version: unstable
Hardware: all Linux
: P3 critical
Assignee: at@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-11-15 01:24 MSK by Dmitry V. Levin
Modified: 2011-01-15 10:47 MSK (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Dmitry V. Levin 2010-11-15 01:24:16 MSK
$ /usr/lib/rpm/perl.req /usr/libexec/git-core/git-svn
# perl(Compress/Zlib.pm) at line 48 (depth 4) inside eval SKIP
dying at /usr/libexec/git-core/git-svn line 5583
 at /usr/lib/perl5/vendor_perl/B/PerlReq.pm line 309
	B::PerlReq::__ANON__('Can\'t locate object method "XSUB" via package "B::PV" at /us...') called at /usr/lib/perl5/vendor_perl/B/Walker.pm line 103
	B::Walker::walk_gv('B::GV=SCALAR(0x152fc730)') called at /usr/lib/perl5/vendor_perl/B/Walker.pm line 122
	B::Walker::walk_stash('HASH(0x149fb630)', 'Git::SVN::Log::') called at /usr/lib/perl5/vendor_perl/B/Walker.pm line 117
	B::Walker::walk_stash('HASH(0x149fb300)', 'Git::SVN::') called at /usr/lib/perl5/vendor_perl/B/Walker.pm line 117
	B::Walker::walk_stash('HASH(0x149fb2b8)', 'Git::') called at /usr/lib/perl5/vendor_perl/B/Walker.pm line 117
	B::Walker::walk_stash('HASH(0x14841be8)', '') called at /usr/lib/perl5/vendor_perl/B/Walker.pm line 129
	B::Walker::walk_subs() called at /usr/lib/perl5/vendor_perl/B/PerlReq.pm line 313
	B::PerlReq::__ANON__() called at (eval 1) line 31
	O::CHECK() called at /usr/libexec/git-core/git-svn line 0
	eval {...} called at /usr/libexec/git-core/git-svn line 0
Can't locate object method "XSUB" via package "B::PV" at /usr/lib/perl5/vendor_perl/B/Walker.pm line 103.
CHECK failed--call queue aborted.
# /usr/libexec/git-core/git-svn: deparse failed. isPerl=0.055435727756259.

$ rpmquery -f /usr/bin/perl /usr/lib/rpm/perl.req
perl-base-5.12.2-alt00
rpm-build-perl-0.73-alt1
Comment 1 Vladimir Lettiev 2010-11-15 17:48:32 MSK
Простейший тесткейс:

 perl -MO=PerlReq -e 'use constant a=>"a"; print a,"a";'

любопытно также сравнить вывод на perl-5.8.9 и на perl-5.12.2:
 
 perl -MData::Dumper -e 'print Dumper(\%::)' | grep "','"

В данном примере ошибка происходит в функции walk_gv(), метод CV возвращает объект класса B::PV для символа 'a,"a";', вместо ожидаемого B:CV, соответственно вызов метода XSUB для этого класса приводит к фатальной ошибке.

Вариант решения проблемы: http://git.altlinux.org/people/crux/packages/rpm-build-perl.git?p=rpm-build-perl.git;a=commitdiff;h=1136a3172304460cd96b75fe58c872c67b391f46
Comment 2 Repository Robot 2010-11-16 01:30:22 MSK
rpm-build-perl-0.73-alt2 -> sisyphus:

* Mon Nov 15 2010 Vladimir Lettiev <crux@altlinux> 0.73-alt2
- fixed fatal error in walk_gv() when method CV return not B::CV class
  object (Closes: #24564)
Comment 3 at@altlinux.org 2010-11-21 12:58:46 MSK
Deparse тоже не работает, надо файлить перлбаг.

$ perl -MO=Deparse /usr/libexec/git-core/git-svn
Can't locate object method "GV" via package "B::PV" at /usr/share/perl5/B/Deparse.pm line 506.
CHECK failed--call queue aborted.
Comment 4 Vladimir Lettiev 2010-11-21 18:18:24 MSK
http://rt.perl.org/rt3/Ticket/Display.html?id=79520
Comment 5 Vladimir Lettiev 2010-11-29 10:43:48 MSK
Ошибка была исправлена в blead perl в коммите e5c69c9, для решения подобной проблемы в http://rt.perl.org/rt3//Public/Bug/Display.html?id=76540

Можно сделать cherry-pick на этот коммит (а также зависимый e3d2b9e). Я уже проверил сборку с этими изменениями - B::Deparse заработал. Можно, в принципе, отправлять в Sisyphus.
Comment 6 Vladimir Lettiev 2011-01-15 10:47:20 MSK
Исправление будет в 5.12.3
http://www.nntp.perl.org/group/perl.perl5.porters/2011/01/msg168102.html