Skip to content

Instantly share code, notes, and snippets.

@memememomo
Created May 16, 2014 13:16
Show Gist options
  • Save memememomo/0f731ed8621bc9982a11 to your computer and use it in GitHub Desktop.
Save memememomo/0f731ed8621bc9982a11 to your computer and use it in GitHub Desktop.
MojoliciousのCookieヘッダのパースエラーの修正パッチ
diff --git a/lib/Mojo/Cookie/Response.pm b/lib/Mojo/Cookie/Response.pm
index 30d9aa1..98b4fa5 100644
--- a/lib/Mojo/Cookie/Response.pm
+++ b/lib/Mojo/Cookie/Response.pm
@@ -31,7 +31,7 @@ sub parse {
# "expires" is a special case, thank you Netscape...
if ($name =~ /^expires$/i) {
push @$pairs, @{shift @$tree // []};
- my $len = $pairs->[0] && $pairs->[0] =~ /-/ ? 6 : 10;
+ my $len = ($pairs->[0] // '') =~ /-/ ? 6 : 10;
$value .= join ' ', ',', grep {defined} splice @$pairs, 0, $len;
}
diff --git a/t/mojo/cookie.t b/t/mojo/cookie.t
index c586c4c..42fa89c 100644
--- a/t/mojo/cookie.t
+++ b/t/mojo/cookie.t
@@ -422,4 +422,26 @@ is $cookies->[0]->expires->epoch, 0, 'right expires epoch value';
is $cookies->[0]->secure, 1, 'right secure flag';
is $cookies->[1], undef, 'no more cookies';
+# Parse response cookie with two digit year (RFC 6265)
+$cookies = Mojo::Cookie::Response->parse(
+ 'foo=bar; Path=/; Expires=Tuesday, 09-Nov-19 23:12:40 GMT; Secure');
+is $cookies->[0]->name, 'foo', 'right name';
+is $cookies->[0]->value, 'bar', 'right value';
+is $cookies->[0]->path, '/', 'right path';
+is $cookies->[0]->expires, 'Sat, 09 Nov 2019 23:12:40 GMT',
+ 'right expires value';
+is $cookies->[0]->expires->epoch, 1573341160, 'right expires epoch value';
+is $cookies->[0]->secure, 1, 'right secure flag';
+is $cookies->[1], undef, 'no more cookies';
+$cookies = Mojo::Cookie::Response->parse(
+ 'foo=bar; Path=/; Expires=Tuesday, 09-Nov-99 23:12:40 GMT; Secure');
+is $cookies->[0]->name, 'foo', 'right name';
+is $cookies->[0]->value, 'bar', 'right value';
+is $cookies->[0]->path, '/', 'right path';
+is $cookies->[0]->expires, 'Tue, 09 Nov 1999 23:12:40 GMT',
+ 'right expires value';
+is $cookies->[0]->expires->epoch, 942189160, 'right expires epoch value';
+is $cookies->[0]->secure, 1, 'right secure flag';
+is $cookies->[1], undef, 'no more cookies';
+
done_testing();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment