Skip to content

Commit 78954e9

Browse files
committed
Merge pull request totaljs#337 from rsmogura/v1.9.4
Fix: duplicated cookie names.
2 parents 9a32640 + 44067c0 commit 78954e9

3 files changed

Lines changed: 11 additions & 1 deletion

File tree

index.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13947,7 +13947,8 @@ http.ServerResponse.prototype.cookie = function(name, value, expires, options) {
1394713947
if (self.headersSent || self.success)
1394813948
return;
1394913949

13950-
var builder = [name + '=' + encodeURIComponent(value)];
13950+
var cookieHeaderStart = name + '=';
13951+
var builder = [cookieHeaderStart + encodeURIComponent(value)];
1395113952
var type = typeof(expires);
1395213953

1395313954
if (expires && !framework_utils.isDate(expires) && type === OBJECT) {
@@ -13979,6 +13980,12 @@ http.ServerResponse.prototype.cookie = function(name, value, expires, options) {
1397913980
builder.push('HttpOnly');
1398013981

1398113982
var arr = self.getHeader('set-cookie') || [];
13983+
13984+
// Cookie, already, can be in array, resulting in duplicate 'set-cookie' header
13985+
var idx = arr.findIndex(cookieStr => cookieStr.startsWith(cookieHeaderStart));
13986+
if (idx !== -1)
13987+
arr.splice(idx, 1);
13988+
1398213989
arr.push(builder.join('; '));
1398313990
self.setHeader('Set-Cookie', arr);
1398413991
return self;

test/controllers/default.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -668,10 +668,12 @@ function pipe() {
668668

669669
function view_cookie() {
670670
var self = this;
671+
self.res.cookie('cookieR', 'O', new Date().add('d', 1));
671672
self.res.cookie('cookie1', '1', new Date().add('d', 1));
672673
self.res.cookie('cookie2', '2', new Date().add('d', 1));
673674
self.res.cookie('cookie3', '3', new Date().add('d', 1));
674675
self.res.cookie('cookie4', '4', new Date().add('d', 1));
676+
self.res.cookie('cookieR', 'N', new Date().add('d', 1));
675677
self.plain('cookie');
676678
}
677679

test/test-framework-debug.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,6 +580,7 @@ function test_routing(next) {
580580

581581
var cookie = headers['set-cookie'].join('');
582582
assert(cookie.indexOf('cookie1=1;') !== -1 && cookie.indexOf('cookie2=2;') !== -1 && cookie.indexOf('cookie3=3;') !== -1, 'Cookie problem.');
583+
assert(cookie.indexOf('cookieR=O;') === -1 && cookie.indexOf('cookieR=N;') !== -1 && cookie.indexOf('cookieR=') === cookie.lastIndexOf('cookieR='), 'Two cookies with same name');
583584
complete();
584585
});
585586
});

0 commit comments

Comments
 (0)