Re: HTTP/Cookies.pm bug?

Gisle Aas <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.lwp
Message-ID <[email protected]>
On Sep 4, 2008, at 07:06, Russ Schnapp wrote:

> I'm not sure whether you're still interested in this, but I think  
> I've come across a bug in HTTP::Cookies.  If you're not the right  
> person for me to handle this, please let me know who is.

I'm the right one; but it's usually best to send requests like this  
to the libwww mailing list. Cc:-ed.

> The problem is in add_cookie_header.  If the cookie version is  
> nonzero and the cookie contents include a non-alpha (\W) character,  
> it escapes any quotes or slashes in the cookie value.

Why do you specify an nonzero version number without using the Set- 
Cookie2 header?

I'm thinking that the right fix for this might be to just force  
'version=0' for any cookie set with 'Set-Cookie'.  This patch achieve  
that:

--- a/lib/HTTP/Cookies.pm
+++ b/lib/HTTP/Cookies.pm
@@ -237,6 +237,9 @@ sub extract_cookies
                         $expires++;
                     }
                 }
+                elsif (!$first_param && lc($k) =~ /^(?:version| 
discard|ns-cookie)/) {
+                    # ignore
+                }
                 else {
                     push(@cur, $k => $v);
                 }

>
> The problem arises when the server has delivered a cookie value  
> that is ENCLOSED in quotes, i.e.,
>    Set-Cookie: member="whatever"; version=1; Path=/
>
> When it comes time for add_cookie_header to do its thing, it generates
>    Cookie: member="\"whatever\""; $Path="/"
>    Cookie2: $Version="1"
>
> I guess there are 2 bugs here:
> 1) The biggest problem is with the quoting.  I think I've fixed  
> this by inserting one line in Cookies.pm:
>
>             # do we need to quote the value
>             if ($val =~ /\W/ && $version) {
>                 $val =~ s/^"(.*)"$/$1/;   ### RLS 9/3/08
>                 $val =~ s/([\\\"])/\\$1/g;
>                 $val = qq("$val");
>             }
>
> 2) The second problem is with the treatment of the Path and version  
> fields.  They appear to be treated as if they were cookie values.  
> And yet they are transmitted with a prefix of "$".  I REALLY don't  
> understand what's going on here, and I'm not inclined to mess with it.

Read RFC 2965 if you want to understand the deal with $Path and  
$Version.

--Gisle
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.