validator/httpd/cgi-bin check,1.432.2.22,1.432.2.23

Update of /sources/public/validator/httpd/cgi-bin
In directory hutz:/tmp/cvs-serv30814

Modified Files:
      Tag: validator-0_7-branch
	check 
Log Message:
Workaround for CGI.pm's _name_and_path_from_env query string issues, #4365

Index: check
===================================================================
RCS file: /sources/public/validator/httpd/cgi-bin/check,v
retrieving revision 1.432.2.22
retrieving revision 1.432.2.23
diff -u -d -r1.432.2.22 -r1.432.2.23
--- check	10 Nov 2006 02:51:50 -0000	1.432.2.22
+++ check	12 Mar 2007 21:18:38 -0000	1.432.2.23
@@ -238,14 +238,6 @@
 # The data structure that will hold all session data.
 my $File;
 
-##############################################
-# Populate $File->{Env} -- Session Metadata. #
-##############################################
-
-#
-# The URL to this CGI Script.
-$File->{Env}->{'Self URI'} = $q->url(-query => 0);
-
 #################################
 # Initialize the datastructure. #
 #################################
@@ -1881,6 +1873,23 @@
   my $File = shift;
   my $q    = shift;
 
+  my $path_info;
+  {
+    # @@@HACK:
+    # CGI.pm's _name_and_path_from_env has query string related issues;
+    # just trump the query string for the duration of calling methods we
+    # know we don't need it for and which have been affected in the past.
+    # More info: http://www.w3.org/Bugs/Public/show_bug.cgi?id=4365
+
+    local $ENV{REQUEST_URI} = URI->new($ENV{REQUEST_URI})->path()
+      if $ENV{REQUEST_URI};
+
+    # The URL to this CGI script.
+    $File->{Env}->{'Self URI'} = $q->url();
+
+    $path_info                 = $q->path_info();
+  }
+
   # Avoid CGI.pm's "exists but undef" behaviour.
   if (scalar $q->param) {
     foreach my $param ($q->param) {
@@ -1900,14 +1909,14 @@
   }
 
   # Futz the URL so "/referer" works.
-  if ($q->path_info) {
-    if ($q->path_info eq '/referer' or $q->path_info eq '/referrer') {
+  if ($path_info) {
+    if ($path_info eq '/referer' or $path_info eq '/referrer') {
       if ($q->referer) {
         $q->param('uri', $q->referer);
         print redirect &self_url_q($q, $File);
         exit;
       } else {
-        print redirect $q->url() . '?uri=' . 'referer';
+        print redirect $File->{Env}->{'Self URI'} . '?uri=referer';
         exit;
       }
     } else {

Received on Monday, 12 March 2007 21:18:49 UTC