[Bug 199152] New: url(-relative=>1) is broken in CGI.pm

bugzilla at redhat.com bugzilla at redhat.com
Mon Jul 17 16:11:14 UTC 2006


Please do not reply directly to this email. All additional
comments should be made in the comments box of this bug report.




https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=199152

           Summary: url(-relative=>1) is broken in CGI.pm
           Product: Red Hat Web Application Stack
           Version: LAMPv1
          Platform: All
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: normal
         Component: perl
        AssignedTo: jvdias at redhat.com
        ReportedBy: jvdias at redhat.com
         QAContact: gozen at redhat.com
                CC: fedora-perl-devel-list at redhat.com,jorton at redhat.com


+++ This bug was initially created as a clone of Bug #188441 +++

Description of problem:
url(-relative) no longer returns the original relative path before rewrites.
This used to work in FC4.


Version-Release number of selected component (if applicable):
perl-5.8.8-4


How reproducible:
100%


Steps to Reproduce:
1. Set up a redirect in your .htaccess file such as:
RewriteEngine On
RewriteBase /
RewriteRule ^testabc.cgi$ test.cgi
2. Create a test perl script, test.cgi such as:
#!/usr/bin/perl

use CGI qw/:standard -no_xhtml/;

print "Content-type: text/plain\n\n";
print url(-relative=>1), "\n";
print url(-absolute=>1), "\n";

3. Look at the web page /testabc.cgi
  
Actual results:
test.cgi
/testabc.cgi


Expected results:
testabc.cgi
/testabc.cgi


Additional info:

-- Additional comment from jvdias at redhat.com on 2006-04-12 17:16 EST --
Hmmm, this does not seem to be a problem with perl's CGI:: module -

I put your rewrite rule in /etc/httpd/conf/httpd.conf's /var/www/cgi-bin/ 
'Directory' entry, from the standard config from a clean install of 
httpd-2.2.0-6 , so it now reads:
---
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options FollowSymLinks
    Order allow,deny
    Allow from all
    RewriteEngine On
    RewriteBase /cgi-bin
    RewriteRule ^testabc.cgi$ test.cgi
</Directory>
---

NOTE: before the server would process the rewrite rule, it insisted that
the FollowSymLinks or FollowSymLinks owner option be specified - without
one of these options enabled, rewrite rules will be ignored.

Then your example test.cgi script works as expected, producing the output:
testabc.cgi
/testabc.cgi

Perhaps your http server is not loading your .htaccess file correctly /
doesn't allow the FollowSymLinks or RewriteRule options ?

I'm CC-ing the httpd maintainer on this - perhaps he could shed some light on
why the rewrite rule might not be taking effect.

If the rewrite rule is correctly applied, the perl CGI module seems to have
no problem with url(-relative=>1) / url(-absolute=>1) .


-- Additional comment from jvdias at redhat.com on 2006-04-12 17:49 EST --
Sorry - my mistake - I was looking at the wrong output - it does produce :
test.cgi
/testabc.cgi.

This is a CPAN CGI module bug: 
   http://rt.cpan.org/Public/Bug/Display.html?id=18500

I'll try out the patch from the above bug (now in CGI 3.17) and see if it 
fixes the problem - if so, it can go into the next perl-5.8.8-6+ release.


-- Additional comment from jvdias at redhat.com on 2006-04-12 18:53 EST --
OK, I now see the problem - CGI.pm-3.15 has a new "-rewrite" sub url() parameter,
which, if 0, is meant to make url() return the "$SCRIPT_NAME", not the
"$REQUEST_URI". It seems the programmer applies this logic only in the
case of '-absolute=>1', NOT '-relative=>1'. Yes, this seems like a bug
to me - and is still in the latest 3.17 version.
Please try out the attached CGI.pm which fixes the problem - if it works OK,
I'll submit it with the next perl-5.8.8-6 version.
  


-- Additional comment from jvdias at redhat.com on 2006-04-12 18:54 EST --
Created an attachment (id=127678)
 --> (https://bugzilla.redhat.com/bugzilla/attachment.cgi?id=127678&action=view)
CGI.pm (3.15) fixed to use rewritten REQUEST_URI in url() if rewrite!=0 


-- Additional comment from jvdias at redhat.com on 2006-04-12 18:55 EST --
Sorry, should have mentioned: copy the above CGI.pm attachment to 
/usr/lib/perl5/5.8.8/CGI.pm to test.

-- Additional comment from bruno at wolff.to on 2006-04-12 22:26 EST --
I tried this out and it looks like it is working. Thanks.

-- Additional comment from jvdias at redhat.com on 2006-04-13 16:30 EST --
Thanks for the testing. The fix is now checked into CVS and will go into the 
next perl-5.8.8-6 release. 
Upstream CPAN CGI.pm bug raised: [rt.cpan.org #18692]
http://rt.cpan.org/Ticket/Display.html?id=18692


-- Additional comment from updates at fedora.redhat.com on 2006-06-05 17:00 EST --
perl-5.8.8-5 has been pushed for fc5, which should resolve this issue.  If these
problems are still present in this version, then please make note of it in this
bug report.

-- 
Configure bugmail: https://bugzilla.redhat.com/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.




More information about the Fedora-perl-devel-list mailing list