Closed Bug 332555 Opened 18 years ago Closed 18 years ago

Use of uninitialized value when clicking on "login again" link

Categories

(Bugzilla :: Installation & Upgrading, defect)

2.20
x86
Other
defect
Not set
normal

Tracking

()

RESOLVED INVALID

People

(Reporter: ycombarnous, Unassigned)

References

Details

User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1

We migrated a Bugzilla 2.20 installation from one server to another.

Everything seems to work just fine, except when clicking on the "log in again" link after a logout. We get a "index.cgi: Use of uninitialized value in substitution (s///) at (eval 22) line 44" error message (but can re-log without any issues.

When we click on the "Actions => Home" link, we do not get this error message and can re-log too.



Reproducible: Always
I cannot reproduce on 2.20.2, 2.22 and 2.23.1. WFM
Status: UNCONFIRMED → RESOLVED
Closed: 18 years ago
Resolution: --- → WORKSFORME
Version: unspecified → 2.20
I just tested against 2.22 and it gives the same error.
Any idea where I should look for this issue?
Status: RESOLVED → UNCONFIRMED
Resolution: WORKSFORME → ---
(In reply to comment #2)
> I just tested against 2.22 and it gives the same error.
> Any idea where I should look for this issue?
> 

Identify this substitution line s///. I cannot find it. Have you modified Perl code or templates in some way?
Blocks: bz-warnings
I tried everything again.
Fresh install on a windows 2003 box of:

- latest mysql-nt-max
- latest perl from activeState
- latest CVS from 2.22 branch

Followed all the instructions on the windows install, and did not customize anything.

Now I get the "index.cgi: Use of uninitialized value in substitution (s///) at (eval 59) line 44" error on the homepage.
It disappears once logged in, but shows up again when trying to re-logon.

No idea where to look for this substitution, as with this fresh install, there is no customized code / DB.
Is there a way to tell from which file the error come, as there is nothing on line 44 of index.cgi ?
(In reply to comment #5)
> Is there a way to tell from which file the error come, as there is nothing on
> line 44 of index.cgi ?
> 

That's the problem! :) What I don't like is this "(eval 59)" thing. glob, any idea?
hrm, weird.

add the following to globals.pl (there's something similar around line 86):

sub warn_with_dignity {
    use Carp;
    my ($err_msg) = @_;
    print $err_msg;
    cluck($err_msg);
}
$::SIG{__WARN__} = \&warn_with_dignity;

that should give us stack trace so we can tell what file the "line 44" refers to.
Cluck function (in cluck($err_msg);) was not recognized, so I replaced it with confess($err_msg).

Here is the output:

undef error - Use of uninitialized value in substitution (s///) at (eval 60) line 44. at globals.pl line 111 main::warn_with_dignity('Use of uninitialized value in substitution (s///) at (eval 60...') called at (eval 60) line 44 CGI::url('Bugzilla::CGI=HASH(0x1cc0264)', 'HASH(0x2402e14)') called at data\template\template\en\default\account\auth\login-small.html.tmpl line 24 eval {...} called at data\template\template\en\default\account\auth\login-small.html.tmpl line 24 eval {...} called at data\template\template\en\default\account\auth\login-small.html.tmpl line 16 Template::Provider::__ANON__('Template::Context=HASH(0x233ba38)') called at d:/bugzilla/Perl/site/lib/Template/Document.pm line 140 eval {...} called at d:/bugzilla/Perl/site/lib/Template/Document.pm line 138 Template::Document::process('Template::Document=HASH(0x24038d0)', 'Template::Context=HASH(0x233ba38)') called at d:/bugzilla/Perl/site/lib/Template/Context.pm line 350 eval {...} called at d:/bugzilla/Perl/site/lib/Template/Context.pm line 320 Template::Context::process('Template::Context=HASH(0x233ba38)', 'account/auth/login-small.html.tmpl') called at data\template\template\en\default\index.html.tmpl line 67 eval {...} called at data\template\template\en\default\index.html.tmpl line 16 Template::Provider::__ANON__('Template::Context=HASH(0x233ba38)') called at d:/bugzilla/Perl/site/lib/Template/Document.pm line 140 eval {...} called at d:/bugzilla/Perl/site/lib/Template/Document.pm line 138 Template::Document::process('Template::Document=HASH(0x2398c9c)', 'Template::Context=HASH(0x233ba38)') called at d:/bugzilla/Perl/site/lib/Template/Context.pm line 350 eval {...} called at d:/bugzilla/Perl/site/lib/Template/Context.pm line 320 Template::Context::process('Template::Context=HASH(0x233ba38)', 'Template::Document=HASH(0x2398c9c)') called at d:/bugzilla/Perl/site/lib/Template/Service.pm line 97 eval {...} called at d:/bugzilla/Perl/site/lib/Template/Service.pm line 94 Template::Service::process('Template::Service=HASH(0x2300460)', 'index.html.tmpl', 'undef') called at d:/bugzilla/Perl/site/lib/Template.pm line 76 Template::process('Bugzilla::Template=HASH(0x22babb4)', 'index.html.tmpl') called at D:\bugzilla\bugzilla\index.cgi line 56 
Previous trace was when going to the homepage (index.cgi).
When trying to enter a new bug (without being logged), I get:

Use of uninitialized value in substitution (s///) at (eval 57) line 44.
Software error:

Use of uninitialized value in substitution (s///) at (eval 57) line 44.
 at globals.pl line 111
	main::warn_with_dignity('Use of uninitialized value in substitution (s///) at (eval 57...') called at (eval 57) line 44
	CGI::url('Bugzilla::CGI=HASH(0x23670a4)', '-relative', 1) called at Bugzilla/Auth/Login/WWW/CGI.pm line 154
	Bugzilla::Auth::Login::WWW::CGI::login('Bugzilla::Auth::Login::WWW::CGI', 2) called at Bugzilla/Auth/Login/WWW.pm line 64
	Bugzilla::Auth::Login::WWW::login('Bugzilla::Auth::Login::WWW', 2) called at Bugzilla.pm line 162
	Bugzilla::login('Bugzilla', 2) called at D:\bugzilla\bugzilla\enter_bug.cgi line 317

For help, please send mail to this site's webmaster, giving this error message and the time and date of the error.
[Thu Apr 6 09:47:19 2006] enter_bug.cgi: Use of uninitialized value in substitution (s///) at (eval 57) line 44. [Thu Apr 6 09:47:19 2006] enter_bug.cgi: at globals.pl line 111 [Thu Apr 6 09:47:19 2006] enter_bug.cgi: main::warn_with_dignity('Use of uninitialized value in substitution (s///) at (eval 57...') called at (eval 57) line 44 [Thu Apr 6 09:47:19 2006] enter_bug.cgi: CGI::url('Bugzilla::CGI=HASH(0x23670a4)', '-relative', 1) called at Bugzilla/Auth/Login/WWW/CGI.pm line 154 [Thu Apr 6 09:47:19 2006] enter_bug.cgi: Bugzilla::Auth::Login::WWW::CGI::login('Bugzilla::Auth::Login::WWW::CGI', 2) called at Bugzilla/Auth/Login/WWW.pm line 64 [Thu Apr 6 09:47:19 2006] enter_bug.cgi: Bugzilla::Auth::Login::WWW::login('Bugzilla::Auth::Login::WWW', 2) called at Bugzilla.pm line 162 [Thu Apr 6 09:47:19 2006] enter_bug.cgi: Bugzilla::login('Bugzilla', 2) called at D:\bugzilla\bugzilla\enter_bug.cgi line 317
ok, so it's Bugzilla::CGI->url() which is CGI->url()

what version of CGI do you have installed?
  perl -MCGI -e"print $CGI::VERSION"

do you get a warning when you run it from the command line?
  perl -MCGI -w -e"print CGI->new->url(-relative => 1)"
i assume this is IIS?
Yes I use IIS (Windows 2003, so must be version 6).
CGI is version 3.15.

For the command 

perl -MCGI -w -e"print CGI->new->url(-relative => 1)"

I get the error 

"Use of uninitialized value in substitution (s///) at (eval 4)
line 44
Use of uninitialized value in print at -e line 1"
On my old server (Windows 2000, IIS 5), I had CGI version 3.10, and the command would return no error (result: -e).
So what to do ;-) ?
sorry, but this bug is INVALID, as it isn't a bug caused by bugzilla.

it looks like the bug was introduced in perl's CGI.pm at version 3.12 to work around an apache2 bug.

you should create a bug via perlbug (see http://rt.perl.org/perlbug/) to let the CGI guys know about this issue.


this should fix it:

--- CGI-3.15.pm 2006-04-06 22:54:00.000000000 +0800
+++ CGI-3.15-fixed.pm   2006-04-06 22:54:17.812500000 +0800
@@ -2657,6 +2657,7 @@
         $url = $uri;
     }

+    $url ||= '';
     $url .= $path         if $path_info and defined $path;
     $url .= "?$query_str" if $query     and $query_str ne '';

@@ -2771,7 +2772,9 @@
    my $raw_path_info   = $ENV{PATH_INFO}   || '';
    my $uri             = $ENV{REQUEST_URI} || '';

-   if ($raw_script_name =~ m/$raw_path_info$/) {
+   if ($raw_script_name ne $raw_path_info
+     && $raw_script_name =~ m/$raw_path_info$/
+   ) {
      $raw_script_name =~ s/$raw_path_info$//;
    }
Status: UNCONFIRMED → RESOLVED
Closed: 18 years ago18 years ago
Resolution: --- → INVALID
It looks like the patch is working. Thx a million!!!
I will open a bug on Perl site as suggested.
*** Bug 334831 has been marked as a duplicate of this bug. ***
*** Bug 337990 has been marked as a duplicate of this bug. ***
*** Bug 344419 has been marked as a duplicate of this bug. ***
Sorry for the dup guys - searched for the error and didnt see it :-)
If Yann or anybody has a link or bug# to the corresponding bug that Yann was going to create in the perl bug tracker please let us know so we can track this issue.
perl #38865

FYI, this happens still with ActiveState latest build 5.8.8 build 820.
At this link:

http://rt.perl.org/rt3/Public/Bug/Display.html?id=38865


is the patch as a .zip file that you can download cgi v 3.15 with the patch applied for iis that was
mentioned in this bug report. This download will save you trying to
manually apply the patch. I have tested this under iis 5.1 and iis 6
and it works and gets rid of the errors. If you are using bugzilla
under windows and active perl, assuming you have active perl already
installed, simply extract the files/folders from the zip file then
copy all files and folders to c:\perl\lib (assuming active perl is
installed to your c: drive) and answer yes to overwrite everything in
the c:\perl\lib folder to apply this fix. Then you will no longer get
the error mentioned here that iis is raising. I am running bugzilla 3,
ActivePerl-5.8.8.820-MSWin32-x86-274739.msi with the patch applied, and mysql-essential-
5.0.45-win32.msi under windows xp pro, windows server 2000, and 2003
with no errors raised from iis 5 or iis 6 after applying this patch.

Created 
http://rt.cpan.org/Ticket/Display.html?id=31510
for similar bug but on linux/apache
For the record, bugs which introduced cgi.url(Relative => 1) in Bugzilla are bug 325079 and bug 276565. If we can come with an equivalent solution which doesn't use cgi.url(), this would be great. Meanwhile, I emailed the maintainer of CGI.pm directly to report this problem. There are already many tickets filed about this problem, but they got no traction at all.
(In reply to comment #27)
> Meanwhile, I emailed the maintainer
> of CGI.pm directly to report this problem. There are already many tickets filed
> about this problem, but they got no traction at all.

The maintainer quickly fixed the bug I reported to him and released CGI.pm 3.33 on January 3 with this fix in it:

http://search.cpan.org/src/LDS/CGI.pm-3.33/Changes

So upgrade to CGI 3.33 and you will no longer get this error.
You need to log in before you can comment on or make changes to this bug.